第152天学习打卡(Kubernetes Service 部署有状态应用 部署守护进程 job corejob Secret ConfigMap )


Service(定义一组pod的访问规则)

1.service存在的意义

(1)防止Pod失联(服务发现)

image-20210609144606530

(2)定义一组Pod访问策略(负载均衡)

image-20210609144811360

2.Pod和Service关系

image-20210609145153412

3.常用service类型

 

 #[root@master ~]# kubectl expose --help 使用这个命令可以查看类型
 
 Type for this service: ClusterIP, NodePort, LoadBalancer

(1) ClusterIP:集群内部进行使用

 [root@master ~]# kubectl expose deployment web --port=80 --target-port=80 --dry-run=client -o yaml > service1.yaml
 [root@master ~]# ls
 10-flannel.conflist admin.conf   deploy.yaml.1           kube-flannel.yml service1.yaml web.yaml
 10-kubeadm.conf     deploy.yaml ingress-nginx-rule.yaml recommended.yaml web1.yaml
 [root@master ~]# cat service1.yaml
 apiVersion: v1
 kind: Service
 metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
 spec:
  ports:
   - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: web
 status:
  loadBalancer: {}
 [root@master ~]# kubectl apply -f service1.yaml
 service/web created
 [root@master ~]# kubectl get svc
 NAME         TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
 kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP         3d18h
 nginx       NodePort    10.98.160.67   <none>        80:32169/TCP     2d19h
 tomcat       NodePort    10.105.92.64   <none>        8080:30513/TCP   2d19h
 web         ClusterIP   10.97.199.113   <none>        80/TCP           18s
 web1         NodePort    10.111.154.60   <none>        80:32594/TCP     17h
 [root@master ~]#
 

在节点进行访问(内部访问):

 [root@node01 ~]# curl 10.111.154.60
 <!DOCTYPE html>
 <html>
 <head>
 <title>Welcome to nginx!</title>
 <style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
 </style>
 </head>
 <body>
 <h1>Welcome to nginx!</h1>
 <p>If you see this page, the nginx web server is successfully installed and
 working. Further configuration is required.</p>
 
 <p>For online documentation and support please refer to
 <a href="http://nginx.org/">nginx.org</a>.<br/>
 Commercial support is available at
 <a href="http://nginx.com/">nginx.com</a>.</p>
 
 <p><em>Thank you for using nginx.</em></p>
 </body>
 </html>
 
 

 

 

(2)NodePort:对外访问应用使用

 [root@master ~]# vim service1.yaml
 

 

image-20210609151953993

遇到的错误: 原因是前面已经设置过web1不能再次用web1这个名字了,换一个就可以了

 
 [root@master ~]# kubectl apply -f service1.yaml
 The Service "web1" is invalid:
 * metadata.resourceVersion: Invalid value: "": must be specified for an update
 * spec.clusterIPs[0]: Invalid value: []string(nil): primary clusterIP can not be unset
 
 
 [root@master ~]# vim service1.yaml #这里换成了web2
 [root@master ~]# kubectl apply -f service1.yaml
 service/web2 created
 [root@master ~]# kubectl get svc
 NAME         TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
 kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP         3d18h
 nginx       NodePort    10.98.160.67     <none>        80:32169/TCP     2d19h
 tomcat       NodePort    10.105.92.64     <none>        8080:30513/TCP   2d19h
 web         ClusterIP   10.97.199.113   <none>        80/TCP           9m35s
 web1         NodePort    10.111.154.60   <none>        80:32594/TCP     17h
 web2         NodePort    10.108.138.180   <none>        80:32474/TCP     22s
 

 

(3)LoadBalancer:对外访问应用使用,公有云

node内网部署应用,外网一般不能访问到的

  • 找到一台可以进行外网访问机器,安装nginx,反向代理

  • 手动把可以访问节点添加到nginx里面

LoadBalance:访问公有云,把负载均衡做到,编写控制器

无状态和有状态

1.无状态:

  • 认为Pod都是一样的

  • 没有顺序要求

  • 不用考虑在哪个node上运行

  • 随意进行伸缩和扩展

2.有状态

  • 上面的所有的因素都要考虑到

  • 让每个pod独立,保持pod启动顺序和唯一性

    • 唯一的网络标识,持久存储

    • 有序,比如mysql主从

部署有状态应用

无头service

  • ClusterIP: none

(1)SatefulSet部署有状态应用

image-20210609160131864

image-20210609161346086

image-20210609161114681

这里有一个错误:错误的原因是我的master里面原本就有一个nginx,然后sts.yaml文件里面创建的nginx就会失败,在查看service的时候就查看不到nginx ClusterIP None

解决办法:删掉原来的nginx,再重新传入sts.yaml文件进行创建

 Warning: resource services/nginx is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
 statefulset.apps/nginx-statefulset created
 The Service "nginx" is invalid:
 * spec.clusterIPs[0]: Invalid value: []string{"None"}: may not change once set
 * spec.clusterIPs[0]: Invalid value: "None": may not be set to 'None' for NodePort services
 

 

 [root@master ~]# ls
 10-flannel.conflist admin.conf   deploy.yaml.1           kube-flannel.yml service1.yaml web1.yaml
 10-kubeadm.conf     deploy.yaml ingress-nginx-rule.yaml recommended.yaml sts.yaml       web.yaml
 [root@master ~]# cat sts.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: nginx-statefulset
  namespace: default
 spec:
  serviceName: nginx
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
       - name: nginx
        image: nginx:latest
        ports:
         - containerPort: 80
 [root@master ~]# kubectl apply -f sts.yaml
 Warning: resource services/nginx is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
 statefulset.apps/nginx-statefulset created
 The Service "nginx" is invalid:
 * spec.clusterIPs[0]: Invalid value: []string{"None"}: may not change once set
 * spec.clusterIPs[0]: Invalid value: "None": may not be set to 'None' for NodePort services
 
 #查看pod,有三个pod,每个都是唯一的名称
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS   RESTARTS   AGE
 nginx-6799fc88d8-kqfmm    1/1     Running   3         2d20h
 nginx-statefulset-0       1/1     Running   0         4m11s
 nginx-statefulset-1       1/1     Running   0         3m53s
 nginx-statefulset-2       1/1     Running   0         3m34s
 tomcat-7d987c7694-8sjkd   1/1     Running   2         2d20h
 web-5bb6fd4c98-4lsd2      1/1     Running   0         66m
 web-5bb6fd4c98-vtfnm      1/1     Running   0         66m
 [root@master ~]#
 #查看创建的无头service
 [root@master ~]# kubectl get svc
 NAME         TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
 kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP         3d19h
 nginx       NodePort    10.98.160.67(未能创建成功)     <none>        80:32169/TCP     2d20h
 tomcat       NodePort    10.105.92.64     <none>        8080:30513/TCP   2d20h
 web         ClusterIP   10.97.199.113   <none>        80/TCP           66m
 web1         NodePort    10.111.154.60   <none>        80:32594/TCP     18h
 web2         NodePort    10.108.138.180   <none>        80:32474/TCP     56m
 

解决办法:

 [root@master ~]# kubectl get deploy
 NAME     READY   UP-TO-DATE   AVAILABLE   AGE
 nginx    1/1     1            1           2d20h
 tomcat   1/1     1            1           2d20h
 web      2/2     2            2           80m
 [root@master ~]# kubectl delete deployment nginx
 deployment.apps "nginx" deleted
 [root@master ~]# kubectl get services
 NAME         TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
 kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP         3d19h
 nginx       NodePort    10.98.160.67     <none>        80:32169/TCP     2d20h
 tomcat       NodePort    10.105.92.64     <none>        8080:30513/TCP   2d20h
 web         ClusterIP   10.97.199.113   <none>        80/TCP           70m
 web1         NodePort    10.111.154.60   <none>        80:32594/TCP     18h
 web2         NodePort    10.108.138.180   <none>        80:32474/TCP     60m
 [root@master ~]# kubectl delete services nginx
 service "nginx" deleted
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS   RESTARTS   AGE
 nginx-statefulset-0       1/1     Running   0         20m
 nginx-statefulset-1       1/1     Running   0         19m
 nginx-statefulset-2       1/1     Running   0         19m
 tomcat-7d987c7694-8sjkd   1/1     Running   2         2d20h
 web-5bb6fd4c98-4lsd2      1/1     Running   0         82m
 web-5bb6fd4c98-vtfnm      1/1     Running   0         82m
 [root@master ~]# rm sts.yaml
 rm: remove regular file ‘sts.yaml’? y
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS   RESTARTS   AGE
 nginx-statefulset-0       1/1     Running   0         20m
 nginx-statefulset-1       1/1     Running   0         20m
 nginx-statefulset-2       1/1     Running   0         20m
 tomcat-7d987c7694-8sjkd   1/1     Running   2         2d20h
 web-5bb6fd4c98-4lsd2      1/1     Running   0         82m
 web-5bb6fd4c98-vtfnm      1/1     Running   0         82m
 [root@master ~]# kubectl delete pods nginx-statefulset-0
 pod "nginx-statefulset-0" deleted
 [root@master ~]# kubectl delete pods nginx-statefulset-1
 pod "nginx-statefulset-1" deleted
 [root@master ~]# kubectl delete pods nginx-statefulset-2
 pod "nginx-statefulset-2" deleted
 

再次重新传入sts.yaml

 [root@master ~]# rz
 
 [root@master ~]# kubectl apply -f sts.yaml
 service/nginx created
 statefulset.apps/nginx-statefulset unchanged
 # 查看pod,有三个pod,每个都是唯一的名称
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS   RESTARTS   AGE
 nginx-statefulset-0       1/1     Running   0         3m20s
 nginx-statefulset-1       1/1     Running   0         3m3s
 nginx-statefulset-2       1/1     Running   0         2m46s
 tomcat-7d987c7694-8sjkd   1/1     Running   2         2d20h
 web-5bb6fd4c98-4lsd2      1/1     Running   0         88m
 web-5bb6fd4c98-vtfnm      1/1     Running   0         88m
 #查看创建的无头service
 [root@master ~]# kubectl get svc
 NAME         TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
 kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP         3d19h
 nginx       ClusterIP   None (可以看到为None)           <none>        80/TCP           3m21s
 tomcat       NodePort    10.105.92.64     <none>        8080:30513/TCP   2d20h
 web         ClusterIP   10.97.199.113   <none>        80/TCP           78m
 web1         NodePort    10.111.154.60   <none>        80:32594/TCP     19h
 web2         NodePort    10.108.138.180   <none>        80:32474/TCP     69m
 

deployment 和statefueset区别:

deployment:是无状态应用

statefueset:有身份的(唯一标识的):

根据主机名 + 按照一定规则生成域名

每个Pod有唯一主机名

唯一域名:

格式:主机名称.service名称.名称空间.svc.cluster.local

例如:nginx-statefulset-0.nginx.defalut.svc.cluster.local

部署守护进程DaemonSet

  • 每个node上运行一个pod,新加入的node也会运行同一个pod,保证所有节点上都有同一个pod目的是打散

  • 例子:在每个node节点安装数据采集工具

首先删除master里面多余的文件

 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS   RESTARTS   AGE
 nginx-statefulset-0       1/1     Running   0         3m20s
 nginx-statefulset-1       1/1     Running   0         3m3s
 nginx-statefulset-2       1/1     Running   0         2m46s
 tomcat-7d987c7694-8sjkd   1/1     Running   2         2d20h
 web-5bb6fd4c98-4lsd2      1/1     Running   0         88m
 web-5bb6fd4c98-vtfnm      1/1     Running   0         88m
 [root@master ~]# kubectl get svc
 NAME         TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
 kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP         3d19h
 nginx       ClusterIP   None             <none>        80/TCP           3m21s
 tomcat       NodePort    10.105.92.64     <none>        8080:30513/TCP   2d20h
 web         ClusterIP   10.97.199.113   <none>        80/TCP           78m
 web1         NodePort    10.111.154.60   <none>        80:32594/TCP     19h
 web2         NodePort    10.108.138.180   <none>        80:32474/TCP     69m
 [root@master ~]# kubectl delete statefulset --all
 statefulset.apps "nginx-statefulset" deleted
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS   RESTARTS   AGE
 tomcat-7d987c7694-8sjkd   1/1     Running   2         2d21h
 web-5bb6fd4c98-4lsd2      1/1     Running   0         116m
 web-5bb6fd4c98-vtfnm      1/1     Running   0         116m
 [root@master ~]# kubectl delete svc nginx
 service "nginx" deleted
 [root@master ~]# kubectl delete svc web
 service "web" deleted
 [root@master ~]# kubectl get svc
 NAME         TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
 kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP         3d20h
 tomcat       NodePort    10.105.92.64     <none>        8080:30513/TCP   2d21h
 web1         NodePort    10.111.154.60   <none>        80:32594/TCP     19h
 web2         NodePort    10.108.138.180   <none>        80:32474/TCP     96m
 [root@master ~]# kubectl delete svc web1
 service "web1" deleted
 [root@master ~]# kubectl get svc
 NAME         TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
 kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP         3d20h
 tomcat       NodePort    10.105.92.64     <none>        8080:30513/TCP   2d21h
 web2         NodePort    10.108.138.180   <none>        80:32474/TCP     96m
 [root@master ~]# kubectl delete svc web2
 service "web2" deleted
 [root@master ~]# kubectl get svc
 NAME         TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
 kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP         3d20h
 tomcat       NodePort    10.105.92.64   <none>        8080:30513/TCP   2d21h
 [root@master ~]# kubectl delete svc tomcat
 service "tomcat" deleted
 [root@master ~]# kubectl get svc
 NAME         TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
 kubernetes   ClusterIP   10.96.0.1   <none>        443/TCP   3d20h
 

第一步导入ds.yaml文件

image-20210609170528765

image-20210609170551264

 

 [root@master ~]# rz
 
 [root@master ~]# ls
 10-flannel.conflist admin.conf   deploy.yaml.1 ingress-nginx-rule.yaml recommended.yaml sts.yaml   web.yaml
 10-kubeadm.conf     deploy.yaml ds.yaml       kube-flannel.yml         service1.yaml     web1.yaml
 [root@master ~]# cat ds.yaml
 apiVersion: apps/v1
 kind: DaemonSet
 metadata:
  name: ds-test
  labels:
    app: filebeat
 spec:
  selector:
    matchLabels:
      app: filebeat
  template:
    metadata:
      labels:
        app: filebeat
    spec:
      containers:
       - name: logs
        image: nginx
        ports:
         - containerPort: 80
        volumeMounts:
         - name: varlog
          mountPath: /tmp/log
      volumes:
       - name: varlog
        hostPath:
          path: /var/log
 [root@master ~]# kubectl apply -f ds.yaml
 daemonset.apps/ds-test created
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS   RESTARTS   AGE
 ds-test-bjdsg             1/1     Running   0         26s
 ds-test-bq68t             1/1     Running   0         26s
 ds-test-rsd2r             1/1     Running   0         26s
 tomcat-7d987c7694-8sjkd   1/1     Running   2         2d21h
 web-5bb6fd4c98-4lsd2      1/1     Running   0         124m
 web-5bb6fd4c98-vtfnm      1/1     Running   0         124m
 
 [root@master ~]# kubectl exec -it ds-test-bjdsg bash 
 kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
 root@ds-test-bjdsg:/# ls /tmp/log
 anaconda   cloud-init-output.log dmesg lastlog   rhsm     tallylog
 audit   cloud-init.log dmesg.old maillog   sa     tuned
 boot.log   cloudinit-deploy.log   ecs_network_optimization.log maillog-20210606   secure     wtmp
 boot.log-20210606 containers grubby messages   secure-20210606   yum.log
 btmp   cron grubby_prune_debug messages-20210606 spooler
 chrony   cron-20210606 journal pods   spooler-20210606
 root@ds-test-bjdsg:/# exit
 exit
 [root@master ~]#
 

守护进程是保证在每个node里面会运行一个pod,作为后台进程。可以看到ds.yaml文件里面没有指定副本数,而ds的pod确是3个。就是现在有3个node

job(一次性任务)

image-20210609172948538

 [root@master ~]# rz
 
 [root@master ~]# ls
 10-flannel.conflist admin.conf   deploy.yaml.1 ingress-nginx-rule.yaml kube-flannel.yml service1.yaml web1.yaml
 10-kubeadm.conf     deploy.yaml ds.yaml       job.yaml                 recommended.yaml sts.yaml       web.yaml
 [root@master ~]# cat job.yaml
 apiVersion: batch/v1
 kind: Job
 metadata:
  name: pi
 spec:
  template:
    spec:
      containers:
       - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4
 [root@master ~]# kubectl create -f job.yaml
 job.batch/pi created
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS             RESTARTS   AGE
 ds-test-bjdsg             1/1     Running             0         29m
 ds-test-bq68t             1/1     Running             0         29m
 ds-test-rsd2r             1/1     Running             0         29m
 pi-klx2r                  0/1     ContainerCreating   0         12s
 tomcat-7d987c7694-8sjkd   1/1     Running             2         2d21h
 web-5bb6fd4c98-4lsd2      1/1     Running             0         154m
 web-5bb6fd4c98-vtfnm      1/1     Running             0         154m
 [root@master ~]# kubectl get pods -o wide
 NAME                     READY   STATUS             RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
 ds-test-bjdsg             1/1     Running             0         30m     10.244.2.26   node02   <none>           <none>
 ds-test-bq68t             1/1     Running             0         30m     10.244.1.25   node01   <none>           <none>
 ds-test-rsd2r             1/1     Running             0         30m     10.244.3.19   node03   <none>           <none>
 pi-klx2r                  0/1     ContainerCreating   0         43s     <none>       node02   <none>           <none>
 tomcat-7d987c7694-8sjkd   1/1     Running             2         2d21h   10.244.1.6   node01   <none>           <none>
 web-5bb6fd4c98-4lsd2      1/1     Running             0         154m    10.244.2.22   node02   <none>           <none>
 web-5bb6fd4c98-vtfnm      1/1     Running             0         154m    10.244.1.21   node01   <none>           <none>
 [root@master ~]# kubectl get jobs
 NAME   COMPLETIONS   DURATION   AGE
 pi     1/1           85s       3m6s
 [root@master ~]# kubectl get pods -o wide
 NAME                     READY   STATUS     RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
 ds-test-bjdsg             1/1     Running     0         34m     10.244.2.26   node02   <none>           <none>
 ds-test-bq68t             1/1     Running     0         34m     10.244.1.25   node01   <none>           <none>
 ds-test-rsd2r             1/1     Running     0         34m     10.244.3.19   node03   <none>           <none>
 pi-klx2r                  0/1     Completed   0         4m42s   10.244.2.27   node02   <none>           <none>
 tomcat-7d987c7694-8sjkd   1/1     Running     2         2d21h   10.244.1.6   node01   <none>           <none>
 web-5bb6fd4c98-4lsd2      1/1     Running     0         158m    10.244.2.22   node02   <none>           <none>
 web-5bb6fd4c98-vtfnm      1/1     Running     0         158m    10.244.1.21   node01   <none>           <none>
 [root@master ~]# kubectl logs pi-klx2r#查看日志
 

在node02节点上进行了镜像拉取

 [root@node02 ~]# docker pull perl
 Using default tag: latest
 latest: Pulling from library/perl
 Digest: sha256:5c615fff95850d01e37931e85191f2b32373d9cbcffe88e083325872f64366bc
 Status: Image is up to date for perl:latest
 docker.io/library/perl:latest
 [root@node02 ~]#
 

 

image-20210609182818434

 [root@master ~]# kubectl delete -f job.yaml
 job.batch "pi" deleted
 [root@master ~]# kubectl get jobs
 No resources found in default namespace.

 

corejob(定时任务)

croejob.yaml

 apiVersion: batch/v1beta1
 kind: CronJob
 metadata:
  name: hello
 spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure
 
 

 

image-20210609184120031

 [root@master ~]# rz 
 
 [root@master ~]# kubectl apply -f cronjob.yaml
 cronjob.batch/hello created
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS     RESTARTS   AGE
 ds-test-bjdsg             1/1     Running     0         97m
 ds-test-bq68t             1/1     Running     0         97m
 ds-test-rsd2r             1/1     Running     0         97m
 hello-1623235380-qmfd2    0/1     Completed   0         79s
 hello-1623235440-whdqs    0/1     Completed   0         19s
 tomcat-7d987c7694-8sjkd   1/1     Running     2         2d22h
 web-5bb6fd4c98-4lsd2      1/1     Running     0         3h41m
 web-5bb6fd4c98-vtfnm      1/1     Running     0         3h41m
 [root@master ~]# kubectl get cronjob
 NAME   SCHEDULE     SUSPEND   ACTIVE   LAST SCHEDULE   AGE
 hello   */1 * * * *   False     0       62s             3m10s
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS     RESTARTS   AGE
 ds-test-bjdsg             1/1     Running     0         99m
 ds-test-bq68t             1/1     Running     0         99m
 ds-test-rsd2r             1/1     Running     0         99m
 hello-1623235440-whdqs    0/1     Completed   0         2m32s
 hello-1623235500-wrxmw    0/1     Completed   0         91s
 hello-1623235560-ww2fk    0/1     Completed   0         31s
 tomcat-7d987c7694-8sjkd   1/1     Running     2         2d22h
 web-5bb6fd4c98-4lsd2      1/1     Running     0         3h43m
 web-5bb6fd4c98-vtfnm      1/1     Running     0         3h43m
 [root@master ~]# kubectl logs hello-1623235440-whdqs
 Wed Jun  9 10:44:24 UTC 2021
 Hello from the Kubernetes cluster
 

 

image-20210609184826383

pod不会越来越多,因为completed表示那个pod已经不在了

Secret

作用:加密数据存在etcd里面,让pod容器以挂载volume方式进行访问

场景:凭证

base64编码:

 [root@master ~]# echo -n 'admin' | base64 #echo:做输出
 YWRtaW4=
 

1.创建secret加密数据

secret.yaml

 apiVersion: v1
 kind: Secret
 metadata:
  name: mysecret
 type: Opaque
 data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm
 

image-20210609191333368

 [root@master ~]# rz
 
 [root@master ~]# ls
 10-flannel.conflist cronjob.yaml   ds.yaml                 kube-flannel.yml service1.yaml web.yaml
 10-kubeadm.conf     deploy.yaml   ingress-nginx-rule.yaml recommended.yaml sts.yaml
 admin.conf           deploy.yaml.1 job.yaml                 secret.yaml       web1.yaml
 [root@master ~]# kubectl create -f secret.yaml
 secret/mysecret created
 [root@master ~]# kubectl get secret
 NAME                 TYPE                                 DATA   AGE
 default-token-pf7bm   kubernetes.io/service-account-token   3     3d22h
 mysecret             Opaque                                2     14s
 [root@master ~]#
 

2.以变量形式挂载到pod容器中

 

image-20210609191907064

 

image-20210609192001754

 [root@master ~]# rz
 
 [root@master ~]# ls
 10-flannel.conflist cronjob.yaml   ds.yaml                 kube-flannel.yml secret.yaml   web1.yaml
 10-kubeadm.conf     deploy.yaml   ingress-nginx-rule.yaml recommended.yaml service1.yaml web.yaml
 admin.conf           deploy.yaml.1 job.yaml                 secret-var.yaml   sts.yaml
 [root@master ~]# kubectl apply -f secret-var.yaml
 pod/mypod created
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS             RESTARTS   AGE
 ds-test-bjdsg             1/1     Running             0         133m
 ds-test-bq68t             1/1     Running             0         133m
 ds-test-rsd2r             1/1     Running             0         133m
 hello-1623237480-nw2lm    0/1     Completed           0         3m8s
 hello-1623237540-t68qr    0/1     Completed           0         2m7s
 hello-1623237600-tdk8t    0/1     Completed           0         67s
 hello-1623237660-xm2m9    0/1     ContainerCreating   0         6s
 mypod                     0/1     ContainerCreating   0         19s
 tomcat-7d987c7694-8sjkd   1/1     Running             2         2d23h
 web-5bb6fd4c98-4lsd2      1/1     Running             0         4h18m
 web-5bb6fd4c98-vtfnm      1/1     Running             0         4h18m
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS     RESTARTS   AGE
 ds-test-bjdsg             1/1     Running     0         134m
 ds-test-bq68t             1/1     Running     0         134m
 ds-test-rsd2r             1/1     Running     0         134m
 hello-1623237540-t68qr    0/1     Completed   0         2m34s
 hello-1623237600-tdk8t    0/1     Completed   0         94s
 hello-1623237660-xm2m9    0/1     Completed   0         33s
 mypod                     1/1     Running     0         46s
 tomcat-7d987c7694-8sjkd   1/1     Running     2         2d23h
 web-5bb6fd4c98-4lsd2      1/1     Running     0         4h18m
 web-5bb6fd4c98-vtfnm      1/1     Running     0         4h18m
 [root@master ~]# kubectl exec -it mypod bash
 kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
 root@mypod:/# echo $SECRET_USERNAME
 admin
 root@mypod:/# echo $SECRET_PASSWORD
 1f2d1e2e67df
 
 

3.以Volume形式挂载pod容器中

image-20210609192626186

 

image-20210609193048942

 [root@master ~]# rz
 
 [root@master ~]# kubectl apply -f secret-vol.yaml
 pod/mypod created
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS             RESTARTS   AGE
 ds-test-bjdsg             1/1     Running             0         145m
 ds-test-bq68t             1/1     Running             0         145m
 ds-test-rsd2r             1/1     Running             0         145m
 hello-1623238140-2tgl4    0/1     Completed           0         3m8s
 hello-1623238200-559qd    0/1     Completed           0         2m8s
 hello-1623238260-xlfzh    0/1     Completed           0         68s
 hello-1623238320-t4w2z    0/1     ContainerCreating   0         7s
 mypod                     0/1     ContainerCreating   0         20s
 tomcat-7d987c7694-8sjkd   1/1     Running             2         2d23h
 web-5bb6fd4c98-4lsd2      1/1     Running             0         4h29m
 web-5bb6fd4c98-vtfnm      1/1     Running             0         4h29m
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS     RESTARTS   AGE
 ds-test-bjdsg             1/1     Running     0         145m
 ds-test-bq68t             1/1     Running     0         145m
 ds-test-rsd2r             1/1     Running     0         145m
 hello-1623238140-2tgl4    0/1     Completed   0         3m28s
 hello-1623238200-559qd    0/1     Completed   0         2m28s
 hello-1623238260-xlfzh    0/1     Completed   0         88s
 hello-1623238320-t4w2z    0/1     Completed   0         27s
 mypod                     1/1     Running     0         40s
 tomcat-7d987c7694-8sjkd   1/1     Running     2         2d23h
 web-5bb6fd4c98-4lsd2      1/1     Running     0         4h29m
 web-5bb6fd4c98-vtfnm      1/1     Running     0         4h29m
 [root@master ~]# kubectl exec -it mypod bash
 kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
 root@mypod:/# ls /etc/foo
 password username
 root@mypod:/# cd /etc/foo
 root@mypod:/etc/foo# cat password
 1f2d1e2e67dfroot@mypod:/etc/foo# cat username
 adminroot@mypod:/etc/foo#
 

ConfigMap

作用:存储不加密数据到etcd,让pod以变量或者volume挂载到容器中

场景:配置文件

首先先删除里面的不用的文件

 adminroot@mypod:/etc/foo# exit
 exit
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS     RESTARTS   AGE
 ds-test-bjdsg             1/1     Running     0         152m
 ds-test-bq68t             1/1     Running     0         152m
 ds-test-rsd2r             1/1     Running     0         152m
 hello-1623238620-flbdr    0/1     Completed   0         2m43s
 hello-1623238680-7kvk7    0/1     Completed   0         103s
 hello-1623238740-pj5zq    0/1     Completed   0         42s
 mypod                     1/1     Running     0         7m48s
 tomcat-7d987c7694-8sjkd   1/1     Running     2         2d23h
 web-5bb6fd4c98-4lsd2      1/1     Running     0         4h36m
 web-5bb6fd4c98-vtfnm      1/1     Running     0         4h36m
 [root@master ~]# kubectl delete secret --all
 secret "default-token-pf7bm" deleted
 secret "mysecret" deleted
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS             RESTARTS   AGE
 ds-test-bjdsg             1/1     Running             0         153m
 ds-test-bq68t             1/1     Running             0         153m
 ds-test-rsd2r             1/1     Running             0         153m
 hello-1623238620-flbdr    0/1     Completed           0         3m20s
 hello-1623238680-7kvk7    0/1     Completed           0         2m20s
 hello-1623238740-pj5zq    0/1     Completed           0         79s
 hello-1623238800-hzp9z    0/1     ContainerCreating   0         19s
 mypod                     1/1     Running             0         8m25s
 tomcat-7d987c7694-8sjkd   1/1     Running             2         2d23h
 web-5bb6fd4c98-4lsd2      1/1     Running             0         4h37m
 web-5bb6fd4c98-vtfnm      1/1     Running             0         4h37m
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS     RESTARTS   AGE
 ds-test-bjdsg             1/1     Running     0         153m
 ds-test-bq68t             1/1     Running     0         153m
 ds-test-rsd2r             1/1     Running     0         153m
 hello-1623238680-7kvk7    0/1     Completed   0         2m43s
 hello-1623238740-pj5zq    0/1     Completed   0         102s
 hello-1623238800-hzp9z    0/1     Completed   0         42s
 mypod                     1/1     Running     0         8m48s
 tomcat-7d987c7694-8sjkd   1/1     Running     2         2d23h
 web-5bb6fd4c98-4lsd2      1/1     Running     0         4h37m
 web-5bb6fd4c98-vtfnm      1/1     Running     0         4h37m
 [root@master ~]# kubectl delete Pod --all
 pod "ds-test-bjdsg" deleted
 pod "ds-test-bq68t" deleted
 pod "ds-test-rsd2r" deleted
 pod "hello-1623238740-pj5zq" deleted
 pod "hello-1623238800-hzp9z" deleted
 pod "hello-1623238860-prcr7" deleted
 pod "mypod" deleted
 pod "tomcat-7d987c7694-8sjkd" deleted
 pod "web-5bb6fd4c98-4lsd2" deleted
 pod "web-5bb6fd4c98-vtfnm" deleted
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS     RESTARTS   AGE
 ds-test-489bb             1/1     Running     0         29s
 ds-test-4rvcr             1/1     Running     0         34s
 ds-test-nx6kt             1/1     Running     0         38s
 hello-1623238920-5zwh4    0/1     Completed   0         5s
 tomcat-7d987c7694-kw6xs   1/1     Running     0         41s
 web-5bb6fd4c98-9zqzg      1/1     Running     0         41s
 web-5bb6fd4c98-d7gqr      1/1     Running     0         41s
 [root@master ~]#
 

image-20210609194757435

1.创建配置文件

 [root@master ~]# rz
 
 [root@master ~]# ls
 10-flannel.conflist cronjob.yaml   ds.yaml                 kube-flannel.yml secret-var.yaml service1.yaml web.yaml
 10-kubeadm.conf     deploy.yaml   ingress-nginx-rule.yaml recommended.yaml secret-vol.yaml sts.yaml
 admin.conf           deploy.yaml.1 job.yaml                 redis.properties secret.yaml     web1.yaml
 [root@master ~]# cat redis.properties
 redis.host=127.0.0.1
 redis.port=6379
 redis.password=123456
 

2.创建configmap

 [root@master ~]# kubectl create configmap redis-config --from-file=redis.properties
 configmap/redis-config created
 [root@master ~]# kubectl get configmap
 NAME               DATA   AGE
 kube-root-ca.crt   1     3d23h
 redis-config       1     57s
 [root@master ~]# kubectl describe configmap redis-config #查看详细信息
 Name:         redis-config
 Namespace:   default
 Labels:       <none>
 Annotations: <none>
 
 Data
 ====
 redis.properties:
 ----
 redis.host=127.0.0.1
 redis.port=6379
 redis.password=123456
 
 Events: <none>
 [root@master ~]#
 

3.以Volume挂载到pod容器中

image-20210609200200660

image-20210609200327364

 [root@master ~]# rz
 
 [root@master ~]# ls
 10-flannel.conflist cm.yaml       deploy.yaml.1           job.yaml         redis.properties secret.yaml   web1.yaml
 10-kubeadm.conf     cronjob.yaml ds.yaml                 kube-flannel.yml secret-var.yaml   service1.yaml web.yaml
 admin.conf           deploy.yaml   ingress-nginx-rule.yaml recommended.yaml secret-vol.yaml   sts.yaml
 [root@master ~]# kubectl apply -f cm.yaml
 pod/mypod created
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS             RESTARTS   AGE
 ds-test-489bb             1/1     Running             0         23m
 ds-test-4rvcr             1/1     Running             0         23m
 ds-test-nx6kt             1/1     Running             0         23m
 hello-1623240120-bmvzz    0/1     Completed           0         2m50s
 hello-1623240180-wj9tn    0/1     Completed           0         110s
 hello-1623240240-57chm    0/1     Completed           0         49s
 mypod                     0/1     ContainerCreating   0         13s
 tomcat-7d987c7694-kw6xs   1/1     Running             0         23m
 web-5bb6fd4c98-9zqzg      1/1     Running             0         23m
 web-5bb6fd4c98-d7gqr      1/1     Running             0         23m
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS             RESTARTS   AGE
 ds-test-489bb             1/1     Running             0         23m
 ds-test-4rvcr             1/1     Running             0         23m
 ds-test-nx6kt             1/1     Running             0         23m
 hello-1623240120-bmvzz    0/1     Completed           0         3m18s
 hello-1623240180-wj9tn    0/1     Completed           0         2m18s
 hello-1623240240-57chm    0/1     Completed           0         77s
 hello-1623240300-f7s9w    0/1     ContainerCreating   0         17s
 mypod                     0/1     Completed           0         41s
 tomcat-7d987c7694-kw6xs   1/1     Running             0         23m
 web-5bb6fd4c98-9zqzg      1/1     Running             0         23m
 web-5bb6fd4c98-d7gqr      1/1     Running             0         23m
 [root@master ~]# kubectl logs mypod
 redis.host=127.0.0.1
 redis.port=6379
 redis.password=123456
 

image-20210609200749663

4.以变量形式挂载到pod容器中

(1)创建yaml,声明变量信息,configmap创建

(2)以变量挂载

image-20210609201300652

 root@master ~]# rz
 
 [root@master ~]# ls
 10-flannel.conflist cm.yaml       deploy.yaml.1           job.yaml         recommended.yaml secret-vol.yaml sts.yaml
 10-kubeadm.conf     cronjob.yaml ds.yaml                 kube-flannel.yml redis.properties secret.yaml     web1.yaml
 admin.conf           deploy.yaml   ingress-nginx-rule.yaml myconfig.yaml     secret-var.yaml   service1.yaml   web.yaml
 [root@master ~]# cat myconfig.yaml
 apiVersion: v1
 kind: ConfigMap
 metadata:
  name: myconfig
  namespace: default
 data:
  special.level: info
  special.type: hello
 [root@master ~]# kubectl apply -f myconfig.yaml
 configmap/myconfig created
 [root@master ~]# kubetcl get myconfig.yaml
 -bash: kubetcl: command not found
 [root@master ~]# kubectl get configmap
 NAME               DATA   AGE
 kube-root-ca.crt   1     3d23h
 myconfig           2     67s
 redis-config       1     23m
 

image-20210609201829322

 [root@master ~]# rz
 
 [root@master ~]# ls
 10-flannel.conflist config-var.yaml ds.yaml                 myconfig.yaml     secret-vol.yaml web1.yaml
 10-kubeadm.conf     cronjob.yaml     ingress-nginx-rule.yaml recommended.yaml secret.yaml     web.yaml
 admin.conf           deploy.yaml     job.yaml                 redis.properties service1.yaml
 cm.yaml             deploy.yaml.1   kube-flannel.yml         secret-var.yaml   sts.yaml
 [root@master ~]# kubectl apply -f config-var.yaml
 pod/mypod created
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS             RESTARTS   AGE
 ds-test-489bb             1/1     Running             0         38m
 ds-test-4rvcr             1/1     Running             0         38m
 ds-test-nx6kt             1/1     Running             0         38m
 hello-1623241020-lfsc8    0/1     Completed           0         2m34s
 hello-1623241080-j9ts8    0/1     Completed           0         94s
 hello-1623241140-lqwzz    0/1     Completed           0         33s
 mypod                     0/1     ContainerCreating   0         12s
 tomcat-7d987c7694-kw6xs   1/1     Running             0         38m
 web-5bb6fd4c98-9zqzg      1/1     Running             0         38m
 web-5bb6fd4c98-d7gqr      1/1     Running             0         38m
 [root@master ~]# kubectl get pods
 NAME                     READY   STATUS     RESTARTS   AGE
 ds-test-489bb             1/1     Running     0         38m
 ds-test-4rvcr             1/1     Running     0         38m
 ds-test-nx6kt             1/1     Running     0         38m
 hello-1623241020-lfsc8    0/1     Completed   0         2m47s
 hello-1623241080-j9ts8    0/1     Completed   0         107s
 hello-1623241140-lqwzz    0/1     Completed   0         46s
 mypod                     0/1     Completed   0         25s
 tomcat-7d987c7694-kw6xs   1/1     Running     0         38m
 web-5bb6fd4c98-9zqzg      1/1     Running     0         38m
 web-5bb6fd4c98-d7gqr      1/1     Running     0         38m
 [root@master ~]# kubectl get configmap
 NAME               DATA   AGE
 kube-root-ca.crt   1     3d23h
 myconfig           2     5m48s
 redis-config       1     28m
 [root@master ~]# kubectl logs mypod
 info hello
 [root@master ~]#
 

B站学习网址:k8s教程由浅入深-尚硅谷哔哩哔哩bilibili

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM