序言
专栏介绍
序号 | 文章 |
第一讲 | 深入解析 k8s:入门指南(一) |
第二讲 | 深入解析 k8s:入门指南(二) |
第三讲 | 深入解析pod对象(一) |
第四讲 | 深入解析pod对象(二) |
第五讲 | 深入解析无状态服务 |
第六讲 | 深入解析有状态服务 |
第七讲 | 深入解析控制器 |
第八讲 | 深入解析 replicaset |
第九讲 | 深入解析滚动升级 |
1 基础介绍
1.1 statefulset 介绍
1.2 statefulset资源状态
1.3 示例讲解
1 yaml文件
apiversion: apps/v1
kind: statefulset #资源类型
metadata:
name: web
spec:
replicas: 3
selector:
matchlabels:
app: nginx # has to match .spec.template.metadata.labels
servicename: "nginx"
template:
metadata:
labels:
app: nginx # has to match .spec.selector.matchlabels
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerport: 80
name: web
volumemounts:
- name: www
mountpath: /usr/share/nginx/html
volumeclaimtemplates:
- metadata:
name: www
spec:
accessmodes:
- readwriteonce
resources:
requests:
storage: 1gi
status:
observedgeneration: 2
replicas: 3
readyreplicas: 3
currentreplicas: 3
updatedreplicas: 3
updaterevision: "2"
currentrevision: "2"
2 statefulset 两种状态
2.1拓扑状态简介
2.2 存储状态简介
3 headless service
3.1headless service 介绍
3.2 使用场景
3.2 yaml示例讲解
apiversion: v1
kind: service #资源类型
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterip: none # 为none,思考一下
selector:
app: nginx
<pod-name>.<svc-name>.<namespace>.svc.cluster.local
3.3 headless service 与service对比
3.4 总结
4 拓扑状态
4.1 问题:
解答:
$(podname)-$(ordinal).$(servicename).$(namespace).svc.cluster.local
4.2示例讲解
4.2.1 statefulset 的 yaml:
apiversion: apps/v1
kind: statefulset #资源类型
metadata:
name: web
spec:
servicename: "nginx" #看这里,思考:为什么多一个这个字段?
replicas: 2
selector:
matchlabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.9.1
ports:
- containerport: 80
name: web
4.2.2 创建
$ kubectl create -f svc.yaml
$ kubectl get service nginx
name type cluster-ip external-ip port(s) age
nginx clusterip none <none> 80/tcp 10s
$ kubectl create -f statefulset.yaml
$ kubectl get statefulset web
name desired current age
web 2 1 19s
4.2.3 查看hostname
$ kubectl exec web-0 -- sh -c 'hostname'
web-0
$ kubectl exec web-1 -- sh -c 'hostname'
web-1
$ kubectl run -i --tty --image busybox dns-test --restart=never --rm /bin/sh
$ nslookup web-0.nginx
server: *.*.*.*
address 1: *.*.*.* kube-dns.kube-system.svc.cluster.local
name: web-0.nginx
address 1: *.*.*.*
$ nslookup web-1.nginx
server: *.*.*.*
address 1: *.*.*.* kube-dns.kube-system.svc.cluster.local
name: web-1.nginx
address 1: *.*.*.*
4.2.3 测试
kubectl delete pod -l app=nginx
pod "web-0" deleted
pod "web-1" deleted
kubectl get pod -w -l app=nginx
name ready status restarts age
web-0 0/1 containercreating 0 0s
name ready status restarts age
web-0 1/1 running 0 2s
web-1 0/1 pending 0 0s
web-1 0/1 containercreating 0 0s
web-1 1/1 running 0 32s
发表评论