Pod控制器应用进阶四(Pod更新,扩缩容)

版权声明:知识就是为了传播! https://blog.csdn.net/weixin_36171533/article/details/82500361
vim deploy-demo.yaml
[root@master test]# cat deploy-demo.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - name: http
          containerPort: 80

kubectl apply -f deploy-demo.yaml
apply声明式创建,也可以创建,也可以更新

kubectl get pods
[root@master test]# kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
client                          1/1       Running   0          2d
myapp-deploy-69b47bc96d-2k2ck   1/1       Running   0          8s
myapp-deploy-69b47bc96d-pm48p   1/1       Running   0          8s
readiness-httpget-container     1/1       Running   0          23h

查看创建:
kubectl get deploy

[root@master test]# kubectl get deploy
NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
myapp-deploy   2         2         2            2           31s

kubectl get rs

[root@master test]# kubectl get rs
NAME                      DESIRED   CURRENT   READY     AGE
myapp-deploy-69b47bc96d   2         2         2         52s


如果想更新的话,直接编辑deploy-demo.yaml文件即可
replicas=5
执行:
kubectl apply -f deploy-demo.yaml
注意:apply是可以执行多次的

[root@master test]# kubectl get rs
NAME                      DESIRED   CURRENT   READY     AGE
myapp-deploy-69b47bc96d   5         5         5         9m
[root@master test]# kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
client                          1/1       Running   0          2d
myapp-deploy-69b47bc96d-58dj7   1/1       Running   0          10s
myapp-deploy-69b47bc96d-8lsjj   1/1       Running   0          10s
myapp-deploy-69b47bc96d-9rrhl   1/1       Running   0          9m
myapp-deploy-69b47bc96d-9xz65   1/1       Running   0          9m
myapp-deploy-69b47bc96d-pr94f   1/1       Running   0          10s
readiness-httpget-container     1/1       Running   0          23h


运行的容器更新版本:
vim deploy-demo.yaml
image: ikubernetes/myapp:v2
kubectl apply -f deploy-demo.yaml 直接就会重新生成容器,全部更新

查看更新后的状态:
kubectl get rs
[root@master test]# kubectl get rs
NAME                      DESIRED   CURRENT   READY     AGE
myapp-deploy-67f6f6b4dc   5         5         5         17s
myapp-deploy-69b47bc96d   0         0         0         11m

kubectl get rs -o wide
[root@master test]# kubectl get rs -o wide
NAME                      DESIRED   CURRENT   READY     AGE       CONTAINERS   IMAGES                 SELECTOR
myapp-deploy-67f6f6b4dc   5         5         5         1m        myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=2392926087,release=canary
myapp-deploy-69b47bc96d   0         0         0         11m       myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=2560367528,release=canary

查看历史的滚动记录
kubectl rollout history deployment myapp-deploy
[root@master test]# kubectl rollout history deployment myapp-deploy
deployments "myapp-deploy"
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

如果想返回上面的一个版本:
[root@master test]# kubectl rollout undo deployment myapp-deploy
deployment.extensions/myapp-deploy
[root@master test]# kubectl get rs -o wide
NAME                      DESIRED   CURRENT   READY     AGE       CONTAINERS   IMAGES                 SELECTOR
myapp-deploy-67f6f6b4dc   0         0         0         5m        myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=2392926087,release=canary
myapp-deploy-69b47bc96d   5         5         5         16m       myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=2560367528,release=canary


K8S 应用的灵活更新

先启动一个监控窗口:
kubectl get pods -l app=myapp -w

再启动一个执行更新的窗口:
[root@master test]# kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v3 && kubectl rollout pause deployment myapp-deploy

deployment.extensions/myapp-deploy image updated
deployment.extensions/myapp-deploy paused

监控端:显示现在镜像,创建容器    #金丝雀发布

也可以使用这个命令来查看更新:
[root@master test]# kubectl rollout status deployment myapp-deploy
Waiting for deployment "myapp-deploy" rollout to finish: 3 out of 5 new replicas have been updated...
更新完成3个,共5个

系统没有继续更新:执行下面的继续更新
[root@master test]# kubectl rollout resume deployment myapp-deploy
deployment.extensions/myapp-deploy resumed

五个全部更新完成
Waiting for deployment "myapp-deploy" rollout to finish: 3 out of 5 new replicas have been updated...
Waiting for deployment "myapp-deploy" rollout to finish: 3 out of 5 new replicas have been updated...
Waiting for deployment "myapp-deploy" rollout to finish: 3 out of 5 new replicas have been updated...
Waiting for deployment "myapp-deploy" rollout to finish: 3 out of 5 new replicas have been updated...
Waiting for deployment "myapp-deploy" rollout to finish: 3 out of 5 new replicas have been updated...
Waiting for deployment "myapp-deploy" rollout to finish: 3 out of 5 new replicas have been updated
查看历史的版本:
kubectl get rs -o wide
[root@master test]# kubectl get rs -o wide
NAME                      DESIRED   CURRENT   READY     AGE       CONTAINERS   IMAGES                 SELECTOR
myapp-deploy-67f6f6b4dc   0         0         0         4m        myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=2392926087,release=canary
myapp-deploy-6bdcd6755d   5         5         5         3m        myapp        ikubernetes/myapp:v3   app=myapp,pod-template-hash=2687823118,release=canary


通过上面发现,系统的版本都更新到了v3版,原来的版本已经暂停了
日志上显示,下载镜像,删除一个,创建一个,可以控制节奏

回滚版本:
先查看版本:
[root@master test]# kubectl rollout history deployment myapp-deploy
deployments "myapp-deploy"
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

回滚到第一个版本:
[root@master test]# kubectl rollout undo deployment myapp-deploy --to-revision=1
deployment.extensions/myapp-deploy
查看是否回滚成功:
[root@master test]# kubectl get rs -o wide
NAME                      DESIRED   CURRENT   READY     AGE       CONTAINERS   IMAGES                 SELECTOR
myapp-deploy-67f6f6b4dc   5         5         5         9m        myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=2392926087,release=canary
myapp-deploy-6bdcd6755d   0         0         0         8m        myapp        ikubernetes/myapp:v3   app=myapp,pod-template-hash=2687823118,release=canary
已经回滚成功


继续查看版本:
[root@master test]# kubectl rollout history deployment myapp-deploy
deployments "myapp-deploy"
REVISION  CHANGE-CAUSE
2         <none>
3         <none>

部署redis项目

apiVersion: apps/v1
kind: Deployment
metadata:
    name: redis
    namespace: default
spec:
    replicas: 1
    selector:
        matchLabels:
            app: redis
            role: logstor 
            #redis日志的存储器
    template:
        metadata:
            labels:
                app: redis
                role: logstor
        spec:
            containers:
            - name: redis
              image: redis:4.0-alpine
              ports:
              - name: redis
                containerPort: 6379
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filb-ds
  namespace: default
spec:
  selector:
    matchLabels:
      app: filebeat
      release: stable
  template:
    metadata: 
      labels:
        app: filebeat
        release: stable
    spec:
      containers:
      - name: filebeat
        image: ikubernetes/filebeat:5.6.5-alpine
        env:
        - name: REDIS_HOST
          value: redis.default.svc.cluster.local
                #redis服务名
                #namespace 命名空间
                #svc.cluster.local地址
        - name: REDIS_LOG_LEVEL
          value: info 
链接方式都是service 主机名
在docker pull ikubernetes/filebeat:5.6.5-alpine

进入redis容器:
kubectl exec -it redis-5b5d6fbbbd-hb4pm -- /bin/sh
/data # netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      
tcp        0      0 :::6379                 :::*                    LISTEN    
/data # nslookup redis.default.svc.cluster.local
在容器中使用这个容器解析到这里

/data # nslookup redis.default.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolve

Name:      redis.default.svc.cluster.local
Address 1: 10.103.208.232 redis.default.svc.cluster.local

容器内部:redis测试连接:
redis-cli -h redis.default.svc.cluster.local
/data # redis-cli -h redis.default.svc.cluster.local
redis.default.svc.cluster.local:6379> keys *
(empty list or set)
退出容器后查看:
[root@master test]# kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
client                          1/1       Running   0          2d
filb-ds-7tjbh                   1/1       Running   0          9m
filb-ds-v566t                   1/1       Running   0          9m
myapp-deploy-67f6f6b4dc-6sbwc   1/1       Running   0          3h
myapp-deploy-67f6f6b4dc-cv4cv   1/1       Running   0          3h
myapp-deploy-67f6f6b4dc-lc4sp   1/1       Running   0          3h
myapp-deploy-67f6f6b4dc-msdfm   1/1       Running   0          3h
myapp-deploy-67f6f6b4dc-tvxpb   1/1       Running   0          3h
readiness-httpget-container     1/1       Running   0          1d
redis-5b5d6fbbbd-hb4pm          1/1       Running   0          9m


进入filb容器
[root@master test]# kubectl exec -it filb-ds-7tjbh -- /bin/sh

/ # ps aux
PID   USER     TIME   COMMAND
    1 root       0:00 /usr/local/bin/filebeat -e -c /etc/filebeat/filebeat.yml
   11 root       0:00 /bin/sh
   15 root       0:00 ps aux

查看容器内的环境变量
printenv

查看容器内的环境变量

/ # printenv
KUBERNETES_SERVICE_PORT=443
REDIS_PORT=tcp://10.103.208.232:6379
KUBERNETES_PORT=tcp://10.96.0.1:443
REDIS_SERVICE_PORT=6379
REDIS_PORT_6379_TCP_ADDR=10.103.208.232
HOSTNAME=filb-ds-7tjbh
SHLVL=1
HOME=/root
REDIS_PORT_6379_TCP_PORT=6379
NGINX_PORT_80_TCP=tcp://10.111.8.112:80
REDIS_PORT_6379_TCP_PROTO=tcp
MYAPP_SERVICE_HOST=10.101.151.96
MYAPP_SERVICE_PORT=80
MYAPP_PORT=tcp://10.101.151.96:80
REDIS_PORT_6379_TCP=tcp://10.103.208.232:6379
TERM=xterm
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
MYAPP_PORT_80_TCP_ADDR=10.101.151.96
NGINX_SERVICE_HOST=10.111.8.112
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
REDIS_LOG_LEVEL=info
KUBERNETES_PORT_443_TCP_PROTO=tcp
MYAPP_PORT_80_TCP_PORT=80
MYAPP_PORT_80_TCP_PROTO=tcp
NGINX_SERVICE_PORT=80
NGINX_PORT=tcp://10.111.8.112:80
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
PWD=/
KUBERNETES_SERVICE_HOST=10.96.0.1
REDIS_SERVICE_HOST=10.103.208.232
MYAPP_PORT_80_TCP=tcp://10.101.151.96:80
REDIS_HOST=redis.default.svc.cluster.local
NGINX_PORT_80_TCP_ADDR=10.111.8.112
FILEBEAT_VERSION=5.6.5
NGINX_PORT_80_TCP_PORT=80
NGINX_PORT_80_TCP_PROTO=tcp

通过上面环境信息可以看出:
REDIS_HOST=redis.default.svc.cluster.local 连接信息已经生效了
查看解析设置
/ # nslookup redis.default.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolve

Name:      redis.default.svc.cluster.local
Address 1: 10.103.208.232 redis.default.svc.cluster.local

[root@master ~]# kubectl get pods -l app=filebeat -o wide
NAME            READY     STATUS    RESTARTS   AGE       IP            NODE      NOMINATED NODE
filb-ds-7tjbh   1/1       Running   0          2h        10.244.2.52   node2     <none>
filb-ds-v566t   1/1       Running   0          2h        10.244.1.50   node1     <none>

[root@master ~]# kubectl get ds
NAME      DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
filb-ds   2         2         2         2            2           <none>          3h
[root@master ~]# kubectl set image daemonsets filb-ds filebeat=ikubernetes/filebeat:5.6.6-alpine
daemonset.extensions/filb-ds image updated
[root@master ~]# kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
client                          1/1       Running   0          2d
filb-ds-2cqcv                   1/1       Running   0          8m
filb-ds-p9tt2                   1/1       Running   0          7m
myapp-deploy-67f6f6b4dc-6sbwc   1/1       Running   0          6h
myapp-deploy-67f6f6b4dc-cv4cv   1/1       Running   0          6h
myapp-deploy-67f6f6b4dc-lc4sp   1/1       Running   0          6h
myapp-deploy-67f6f6b4dc-msdfm   1/1       Running   0          6h
myapp-deploy-67f6f6b4dc-tvxpb   1/1       Running   0          6h
readiness-httpget-container     1/1       Running   0          1d
redis-5b5d6fbbbd-hb4pm          1/1       Running   0          3h

猜你喜欢

转载自blog.csdn.net/weixin_36171533/article/details/82500361
今日推荐