博客园  :: 首页  :: 管理

先创建一个 StatefulSet 类型的资源,这个也即是管理有状态的资源,另外也还得先创建Service类型的资源

本来,还需要创建其他,如持久卷相关的等,这里只是方便说明StatefulSet-定义一个有状态服务,于是进行了简化,web.yaml配置文件

[root@k8s-master qq-5201351]# cat web.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     # Statefulset 类型的资源
metadata:
  name: web           # Statefulset 对象的名称
spec:
  serviceName: "nginx"    # 使用哪个 service 来管理 dns
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:      # 容器内部要暴露的端口
        - containerPort: 80    # 具体暴露的端口号
          name: web            # 该端口配置的名称

接下来就是创建,和相关的信息查看

[root@k8s-master ~]# kubectl create -f web.yaml
service/nginx created
statefulset.apps/web created
[root@k8s-master ~]# kubectl get sts
NAME   READY   AGE
web    2/2     7s
[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   28d
nginx        ClusterIP   None         <none>        80/TCP    30s
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl get po
NAME    READY   STATUS    RESTARTS   AGE
web-0   1/1     Running   0          62s
web-1   1/1     Running   0          59s
[root@k8s-master ~]# kubectl run -it --image busybox:1.28.4 dns-test /bin/sh
If you don't see a command prompt, try pressing enter.
/ # nslookup web-0.nginx
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      web-0.nginx
Address 1: 10.224.169.180 web-0.nginx.default.svc.cluster.local
/ # exit
Session ended, resume using 'kubectl attach dns-test -c dns-test -i -t' command when the pod is running
[root@k8s-master ~]# kubectl get pod -o wide
NAME       READY   STATUS    RESTARTS      AGE     IP               NODE        NOMINATED NODE   READINESS GATES
dns-test   1/1     Running   1 (13s ago)   2m3s    10.224.169.181   k8s-node2   <none>           <none>
web-0      1/1     Running   0             9m57s   10.224.169.180   k8s-node2   <none>           <none>
web-1      1/1     Running   0             9m54s   10.224.36.120    k8s-node1   <none>           <none>
[root@k8s-master ~]#

上面的 web-0.nginx, 其中 nginx 代表的是 service的名称 

StatefulSet 中每个 Pod 的 DNS 格式为 statefulSetName-{0..N-1}.serviceName.namespace.svc.cluster.local
  • serviceName 为 Headless Service 的名字
  • 0..N-1 为 Pod 所在的序号,从 0 开始到 N-1
  • statefulSetName 为 StatefulSet 的名字
  • namespace 为服务所在的 namespace,Headless Servic 和 StatefulSet 必须在相同的 namespace
  • .cluster.local 为 Cluster Domain

 

 

 

尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17724823.html