k8s 之statefulset有状态应用

StatefulSet 由以下几个部分组成:

1. Headless Service:用来定义 pod 网路标识,生成可解析的 DNS 记录

2. volumeClaimTemplates:存储卷申请模板,创建 pvc,指定 pvc 名称大小,自动创建 pvc,且 pvc 由存储类供应。

3. StatefulSet:管理 pod 的

Headless service 不分配 clusterIP,headless service 可以通过解析 service 的 DNS,返回所 有 Pod 的 dns 和 ip 地址 (statefulSet 部署的 Pod 才有 DNS),普通的 service,只能通过解析 service 的 DNS 返回 service 的 ClusterIP。

在用 statefulset 管理 pod 时要求 pod 名称必须是有序的 ,每一个 pod 不能被随意取代,pod 重建后 pod 名称还是 一样的。因为 pod IP 是变化的,所以要用 Pod 名称来识别。pod 名称是 pod 唯一性的标识符, 必须持久稳定有效。这时候要用到无头服务,它可以给每个 Pod 一个唯一的名称。

解析

1
<service name>.$<namespace name>.svc.cluster.local

  

Statefulset 资源清单文件编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
[root@master-1 statefulset]# cat statefulset.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
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
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:  #动态申请存储
  - metadata:
       name: www
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi 
[root@master-1 statefulset]# kubectl apply -f statefulset.yaml
service/nginx unchanged
statefulset.apps/web created
[root@master-1 statefulset]# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS          REASON   AGE
pvc-014f93a3-c32a-4a67-8d89-5601c4ebc85c   1Gi        RWX            Delete           Bound    default/test-claim      managed-nfs-storage            131m
pvc-2f3fd42e-20bf-45a2-a743-36995db15701   2Gi        RWO            Delete           Bound    default/www-storage-1   managed-nfs-storage            33m
pvc-4a77164b-ec51-4a0f-8070-4fc4721288c5   1Gi        RWX            Delete           Bound    default/test-claim1-1   managed-nfs-storage            130m
pvc-4a8303f8-38fe-42f2-994b-ed4626d9ac5e   2Gi        RWO            Delete           Bound    default/www-storage-0   managed-nfs-storage            33m
pvc-a7ea9d95-cd35-4e64-8a91-aadd0470a5c0   1Gi        RWO            Delete           Bound    default/www-web-1       managed-nfs-storage            3s
pvc-c0aec411-f567-4926-b2a4-bf84883e9392   1Gi        RWO            Delete           Bound    default/www-web-0       managed-nfs-storage            14s
[root@master-1 statefulset]# kubectl get pvc
NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
test-claim      Bound    pvc-014f93a3-c32a-4a67-8d89-5601c4ebc85c   1Gi        RWX            managed-nfs-storage   131m
test-claim1-1   Bound    pvc-4a77164b-ec51-4a0f-8070-4fc4721288c5   1Gi        RWX            managed-nfs-storage   130m
www-storage-0   Bound    pvc-4a8303f8-38fe-42f2-994b-ed4626d9ac5e   2Gi        RWO            managed-nfs-storage   33m
www-storage-1   Bound    pvc-2f3fd42e-20bf-45a2-a743-36995db15701   2Gi        RWO            managed-nfs-storage   33m
www-web-0       Bound    pvc-c0aec411-f567-4926-b2a4-bf84883e9392   1Gi        RWO            managed-nfs-storage   12s
www-web-1       Bound    pvc-a7ea9d95-cd35-4e64-8a91-aadd0470a5c0   1Gi        RWO            managed-nfs-storage   1s

  动态跟踪pod

1
[root@master-1 statefulset]# kubectl get pods -l app=nginx -w

  循环查看主机名

1
2
3
[root@master-1 statefulset]# for i in 0 1;do kubectl exec web-$i -- sh -c 'hostname';done
web-0
web-1

  进入pod 容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
[root@master-1 statefulset]# kubectl exec -it web-1 -c nginx -- /bin/sh
# /bin/bash
root@web-1:/#  apt install -y dnsutils
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  bind9-dnsutils bind9-host bind9-libs libedit2 libfstrm0 libjson-c5 liblmdb0 libmaxminddb0 libprotobuf-c1 libuv1
Suggested packages:
  mmdb-bin
The following NEW packages will be installed:
  bind9-dnsutils bind9-host bind9-libs dnsutils libedit2 libfstrm0 libjson-c5 liblmdb0 libmaxminddb0 libprotobuf-c1 libuv1
0 upgraded, 11 newly installed, 0 to remove and 0 not upgraded.
Need to get 2798 kB of archives.
After this operation, 6269 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bullseye/main amd64 libuv1 amd64 1.40.0-2 [132 kB]
Get:2 http://deb.debian.org/debian bullseye/main amd64 libfstrm0 amd64 0.6.0-1+b1 [21.5 kB]
Get:3 http://deb.debian.org/debian bullseye/main amd64 libjson-c5 amd64 0.15-2 [42.8 kB]
Get:4 http://deb.debian.org/debian bullseye/main amd64 liblmdb0 amd64 0.9.24-1 [45.0 kB]
Get:5 http://deb.debian.org/debian bullseye/main amd64 libmaxminddb0 amd64 1.5.2-1 [29.8 kB]
Get:6 http://deb.debian.org/debian bullseye/main amd64 libprotobuf-c1 amd64 1.3.3-1+b2 [27.0 kB]
Get:7 http://deb.debian.org/debian bullseye/main amd64 bind9-libs amd64 1:9.16.37-1~deb11u1 [1424 kB]
Get:8 http://deb.debian.org/debian bullseye/main amd64 bind9-host amd64 1:9.16.37-1~deb11u1 [308 kB]
Get:9 http://deb.debian.org/debian bullseye/main amd64 libedit2 amd64 3.1-20191231-2+b1 [96.7 kB]
Get:10 http://deb.debian.org/debian bullseye/main amd64 bind9-dnsutils amd64 1:9.16.37-1~deb11u1 [404 kB]
Get:11 http://deb.debian.org/debian bullseye/main amd64 dnsutils all 1:9.16.37-1~deb11u1 [267 kB]
Fetched 2798 kB in 1s (3423 kB/s
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package libuv1:amd64.
(Reading database ... 7826 files and directories currently installed.)
Preparing to unpack .../00-libuv1_1.40.0-2_amd64.deb ...
Unpacking libuv1:amd64 (1.40.0-2) ...........................................................................................................................................................................]
Selecting previously unselected package libfstrm0:amd64......................................................................................................................................................]
Preparing to unpack .../01-libfstrm0_0.6.0-1+b1_amd64.deb ...
Unpacking libfstrm0:amd64 (0.6.0-1+b1) ......................................................................................................................................................................]
Selecting previously unselected package libjson-c5:amd64.....................................................................................................................................................]
Preparing to unpack .../02-libjson-c5_0.15-2_amd64.deb ...
Unpacking libjson-c5:amd64 (0.15-2) .........................................................................................................................................................................]
Selecting previously unselected package liblmdb0:amd64.......................................................................................................................................................]
Preparing to unpack .../03-liblmdb0_0.9.24-1_amd64.deb ...
Unpacking liblmdb0:amd64 (0.9.24-1) ...########..............................................................................................................................................................]
Selecting previously unselected package libmaxminddb0:amd64..................................................................................................................................................]
Preparing to unpack .../04-libmaxminddb0_1.5.2-1_amd64.deb ...
Unpacking libmaxminddb0:amd64 (1.5.2-1) ...############......................................................................................................................................................]
Selecting previously unselected package libprotobuf-c1:amd64.................................................................................................................................................]
Preparing to unpack .../05-libprotobuf-c1_1.3.3-1+b2_amd64.deb ...
Unpacking libprotobuf-c1:amd64 (1.3.3-1+b2) ...################..............................................................................................................................................]
Selecting previously unselected package bind9-libs:amd64.##########..........................................................................................................................................]
Preparing to unpack .../06-bind9-libs_1%3a9.16.37-1~deb11u1_amd64.deb ...
Unpacking bind9-libs:amd64 (1:9.16.37-1~deb11u1) ...####################.....................................................................................................................................]
Selecting previously unselected package bind9-host.#########################.................................................................................................................................]
Preparing to unpack .../07-bind9-host_1%3a9.16.37-1~deb11u1_amd64.deb ...
Unpacking bind9-host (1:9.16.37-1~deb11u1) ...##################################.............................................................................................................................]
Selecting previously unselected package libedit2:amd64.#############################.........................................................................................................................]
Preparing to unpack .../08-libedit2_3.1-20191231-2+b1_amd64.deb ...
Unpacking libedit2:amd64 (3.1-20191231-2+b1) ...########################################.....................................................................................................................]
Selecting previously unselected package bind9-dnsutils.#####################################.................................................................................................................]
Preparing to unpack .../09-bind9-dnsutils_1%3a9.16.37-1~deb11u1_amd64.deb ...
Unpacking bind9-dnsutils (1:9.16.37-1~deb11u1) ...##############################################.............................................................................................................]
Selecting previously unselected package dnsutils.####################################################........................................................................................................]
Preparing to unpack .../10-dnsutils_1%3a9.16.37-1~deb11u1_all.deb ...
Unpacking dnsutils (1:9.16.37-1~deb11u1) ...#############################################################....................................................................................................]
Setting up liblmdb0:amd64 (0.9.24-1) ...#####################################################################................................................................................................]
Setting up libmaxminddb0:amd64 (1.5.2-1) ...#########################################################################........................................................................................]
Setting up libfstrm0:amd64 (0.6.0-1+b1) ...###################################################################################...............................................................................]
Setting up libedit2:amd64 (3.1-20191231-2+b1) ...#####################################################################################.......................................................................]
Setting up libprotobuf-c1:amd64 (1.3.3-1+b2) ...##############################################################################################...............................................................]
Setting up libuv1:amd64 (1.40.0-2) ...################################################################################################################.......................................................]
Setting up libjson-c5:amd64 (0.15-2) ...#######################################################################################################################..............................................]
Setting up bind9-libs:amd64 (1:9.16.37-1~deb11u1) ...##################################################################################################################......................................]
Setting up bind9-host (1:9.16.37-1~deb11u1) ...################################################################################################################################..............................]
Setting up bind9-dnsutils (1:9.16.37-1~deb11u1) ...#####################################################################################################################################.....................]
Setting up dnsutils (1:9.16.37-1~deb11u1) ...###################################################################################################################################################.............]
Processing triggers for libc-bin (2.31-13+deb11u6) ...##################################################################################################################################################.....]
 
# statefulset中pod DNS 记录组成部分 statefulset名字-随机数.servicename.namespace(名称空间).svc.cluster.local.
root@web-1:/# nslookup web-0.nginx.default.svc.cluster.local.
Server:     10.96.0.10
Address:    10.96.0.10#53
 
Name:   web-0.nginx.default.svc.cluster.local
Address: 10.244.84.166
 
[root@master-1 statefulset]# kubectl get pods -o wide  查看pod 详细信息对比ip
NAME                                      READY   STATUS    RESTARTS   AGE     IP              NODE     NOMINATED NODE   READINESS GATES
nfs-client-provisioner-7c7bf9f6bd-dp5h8   1/1     Running   0          3h26m   10.244.84.156   node-1   <none>           <none>
nginx-test                                1/1     Running   4          105d    10.244.84.148   node-1   <none>           <none>
read-pod                                  1/1     Running   0          173m    10.244.84.157   node-1   <none>           <none>
storage-0                                 1/1     Running   0          75m     10.244.84.164   node-1   <none>           <none>
storage-1                                 1/1     Running   0          75m     10.244.84.165   node-1   <none>           <none>
web-0                                     1/1     Running   0          51m     10.244.84.166   node-1   <none>           <none>
web-1                                     1/1     Running   0          51m     10.244.84.167   node-1   <none>           <none>
root@web-1:/# apt install -y inetutils-ping
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  netbase
The following NEW packages will be installed:
  inetutils-ping netbase
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 265 kB of archives.
After this operation, 416 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bullseye/main amd64 netbase all 6.3 [19.9 kB]
Get:2 http://deb.debian.org/debian bullseye/main amd64 inetutils-ping amd64 2:2.0-1+deb11u1 [245 kB]
Fetched 265 kB in 0s (904 kB/s)    
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package netbase.
(Reading database ... 7917 files and directories currently installed.)
Preparing to unpack .../archives/netbase_6.3_all.deb ...
Unpacking netbase (6.3) ...###########.......................................................................................................................................................................]
Selecting previously unselected package inetutils-ping.####..................................................................................................................................................]
Preparing to unpack .../inetutils-ping_2%3a2.0-1+deb11u1_amd64.deb ...
Unpacking inetutils-ping (2:2.0-1+deb11u1) ...##################################.............................................................................................................................]
Setting up netbase (6.3) ...#########################################################################........................................................................................................]
Setting up inetutils-ping (2:2.0-1+deb11u1) ...###############################################################################################...............................................................]
root@web-1:/# ping web-0.nginx.default.svc.cluster.local
PING web-0.nginx.default.svc.cluster.local (10.244.84.166): 56 data bytes
64 bytes from 10.244.84.166: icmp_seq=0 ttl=63 time=0.150 ms
64 bytes from 10.244.84.166: icmp_seq=1 ttl=63 time=0.109 ms
64 bytes from 10.244.84.166: icmp_seq=2 ttl=63 time=0.073 ms
^C--- web-0.nginx.default.svc.cluster.local ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.073/0.111/0.150/0.031 ms

  

posted @   烟雨楼台,行云流水  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示