云盘算第四阶段: cloud二周目 07-08

守听  金牌会员 | 2024-10-28 05:50:41 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 871|帖子 871|积分 2613

cloud 07

一、k8s服务管理




   创建服务

  1. # 资源清单文件
  2. [root@master ~]# kubectl create service clusterip websvc --tcp=80:80 --dry-run=client -o yaml
  3. [root@master ~]# vim websvc.yaml
  4. ---
  5. kind: Service
  6. apiVersion: v1
  7. metadata:
  8.   name: websvc
  9. spec:
  10.   type: ClusterIP
  11.   selector:
  12.     app: web
  13.   ports:
  14.   - protocol: TCP
  15.     port: 80
  16.     targetPort: 80
  17. [root@master ~]# kubectl apply -f websvc.yaml
  18. service/websvc created
  19. [root@master ~]# kubectl get service
  20. NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)
  21. kubernetes   ClusterIP   10.245.0.1      <none>        443/TCP
  22. websvc       ClusterIP   10.245.5.18     <none>        80/TCP
复制代码
解析域名

  1. # 安装工具软件包
  2. [root@master ~]# dnf install -y bind-utils
  3. # 查看 DNS 服务地址
  4. [root@master ~]# kubectl -n kube-system get service kube-dns
  5. NAME       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)
  6. kube-dns   ClusterIP   10.245.0.10   <none>        53/UDP,53/TCP,9153/TCP
  7. # 域名解析测试
  8. [root@master ~]# host websvc.default.svc.cluster.local 10.245.0.10
  9. Using domain server:
  10. Name: 10.245.0.10
  11. Address: 10.245.0.10#53
  12. Aliases:
  13. websvc.default.svc.cluster.local has address 10.245.5.18
复制代码
创建后端应用

  
  1. [root@master ~]# vim web1.yaml
  2. ---
  3. kind: Pod
  4. apiVersion: v1
  5. metadata:
  6.   name: web1
  7.   labels:
  8.     app: web   # 服务靠标签寻找后端
  9. spec:
  10.   containers:
  11.   - name: apache
  12.     image: myos:httpd
  13. [root@master ~]# kubectl apply -f web1.yaml
  14. pod/web1 created
  15. [root@master ~]# curl http://10.245.5.18
  16. Welcome to The Apache.
复制代码
负载均衡

  1. [root@master ~]# sed 's,web1,web2,' web1.yaml |kubectl apply -f -
  2. pod/web2 created
  3. [root@master ~]# sed 's,web1,web3,' web1.yaml |kubectl apply -f -
  4. pod/web3 created
  5. [root@master ~]# curl -s http://10.245.5.18/info.php |grep php_host
  6. php_host:       web1
  7. [root@master ~]# curl -s http://10.245.5.18/info.php |grep php_host
  8. php_host:       web2
  9. [root@master ~]# curl -s http://10.245.5.18/info.php |grep php_host
  10. php_host:       web3
复制代码
固定 IP 服务

  1. [root@master ~]# vim websvc.yaml
  2. ---
  3. kind: Service
  4. apiVersion: v1
  5. metadata:
  6.   name: websvc
  7. spec:
  8.   type: ClusterIP
  9.   clusterIP: 10.245.1.80    # 可以设置 ClusterIP
  10.   selector:
  11.     app: web
  12.   ports:
  13.   - protocol: TCP
  14.     port: 80
  15.     targetPort: 80
  16. [root@master ~]# kubectl replace --force -f websvc.yaml
  17. service "websvc" deleted
  18. service/websvc replaced
  19. [root@master ~]# kubectl get service
  20. NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)
  21. kubernetes   ClusterIP   10.245.0.1    <none>        443/TCP
  22. websvc       ClusterIP   10.245.1.80   <none>        80/TCP
复制代码
端口别名

  
  1. [root@master ~]# vim websvc.yaml
  2. ---
  3. kind: Service
  4. apiVersion: v1
  5. metadata:
  6.   name: websvc
  7. spec:
  8.   type: ClusterIP
  9.   clusterIP: 10.245.1.80
  10.   selector:
  11.     app: web
  12.   ports:
  13.   - protocol: TCP
  14.     port: 80
  15.     targetPort: myhttp    # 使用别名查找后端服务端口
  16. [root@master ~]# kubectl replace --force -f websvc.yaml
  17. service "websvc" deleted
  18. service/websvc replaced
  19. [root@master ~]# kubectl delete pod --all
  20. pod "web1" deleted
  21. pod "web2" deleted
  22. pod "web3" deleted
  23. [root@master ~]# vim web1.yaml
  24. ---
  25. kind: Pod
  26. apiVersion: v1
  27. metadata:
  28.   name: web1
  29.   labels:
  30.     app: web
  31. spec:
  32.   containers:
  33.   - name: apache
  34.     image: myos:httpd
  35.     ports:               # 配置端口规范
  36.     - name: myhttp       # 端口别名
  37.       protocol: TCP      # 协议
  38.       containerPort: 80  # 端口号
  39. [root@master ~]# kubectl apply -f web1.yaml
  40. pod/web1 created
  41. [root@master ~]# curl http://10.245.1.80
  42. Welcome to The Apache.
复制代码
服务排错

  1. ---
  2. kind: Service
  3. apiVersion: v1
  4. metadata:
  5.   name: web123
  6. spec:
  7.   type: ClusterIP
  8.   clusterIP: 192.168.1.88
  9.   selector:
  10.     app: apache
  11.   ports:
  12.   - protocol: TCP
  13.     port: 80
  14.     targetPort: web
复制代码
nodePort

  



  对外发布服务

  1. [root@master ~]# vim mysvc.yaml
  2. ---
  3. kind: Service
  4. apiVersion: v1
  5. metadata:
  6.   name: mysvc
  7. spec:
  8.   type: NodePort            # 服务类型
  9.   selector:
  10.     app: web
  11.   ports:
  12.   - protocol: TCP
  13.     port: 80
  14.     nodePort: 30080         # 映射端口号
  15.     targetPort: 80
  16. [root@master ~]# kubectl apply -f mysvc.yaml
  17. service/mysvc configured
  18. [root@master ~]# kubectl get service
  19. NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)
  20. kubernetes   ClusterIP   10.245.0.1    <none>        443/TCP
  21. websvc       ClusterIP   10.245.1.80   <none>        80/TCP
  22. mysvc        NodePort    10.245.3.88   <none>        80:30080/TCP
  23. [root@master ~]# curl http://node-0001:30080
  24. Welcome to The Apache.
  25. [root@master ~]# curl http://node-0002:30080
  26. Welcome to The Apache.
  27. [root@master ~]# curl http://node-0003:30080
  28. Welcome to The Apache.
  29. [root@master ~]# curl http://node-0004:30080
  30. Welcome to The Apache.
  31. [root@master ~]# curl http://node-0005:30080
  32. Welcome to The Apache.
复制代码
二、lngress 安装与战略配置

  

  


安装控制器

  
  1. [root@master ~]# cd plugins/ingress
  2. [root@master ingress]# docker load -i ingress.tar.xz
  3. [root@master ingress]# docker images|while read i t _;do
  4.     [[ "${t}" == "TAG" ]] && continue
  5.     [[ "${i}" =~ ^"harbor:443/".+ ]] && continue
  6.     docker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}
  7.     docker push harbor:443/plugins/${i##*/}:${t}
  8.     docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}
  9. done
  10. [root@master ingress]# sed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/plugins/\3,' deploy.yaml
  11. 443:    image: registry.k8s.io/ingress-nginx/controller:v1.9.6
  12. 546:    image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20231226-1a7112e06
  13. 599:    image: registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20231226-1a7112e06
  14. [root@master ingress]# kubectl apply -f deploy.yaml
  15. [root@master ingress]# kubectl -n ingress-nginx get pods
  16. NAME                                        READY   STATUS      RESTARTS
  17. ingress-nginx-admission-create--1-lm52c     0/1     Completed   0
  18. ingress-nginx-admission-patch--1-sj2lz      0/1     Completed   0
  19. ingress-nginx-controller-5664857866-tql24   1/1     Running     0
复制代码
验证后端服务

  1. [root@master ~]# kubectl get pods,services
  2. NAME       READY   STATUS    RESTARTS   AGE
  3. pod/web1   1/1     Running   0          35m
  4. NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)
  5. service/kubernetes   ClusterIP   10.245.0.1    <none>        443/TCP
  6. service/websvc       ClusterIP   10.245.1.80   <none>        80/TCP
  7. service/mysvc        NodePort    10.245.3.88   <none>        80:30080/TCP
  8. [root@master ~]# curl http://10.245.1.80
  9. Welcome to The Apache.
复制代码
对外发布服务

  1. # 查询 ingress 控制器类名称
  2. [root@master ~]# kubectl get ingressclasses.networking.k8s.io
  3. NAME    CONTROLLER             PARAMETERS   AGE
  4. nginx   k8s.io/ingress-nginx   <none>       5m7s
  5. # 资源清单文件
  6. [root@master ~]# kubectl create ingress mying --class=nginx --rule=nsd.tedu.cn/*=mysvc:80 --dry-run=client -o yaml
  7. [root@master ~]# vim mying.yaml
  8. ---
  9. kind: Ingress
  10. apiVersion: networking.k8s.io/v1
  11. metadata:
  12.   name: mying
  13. spec:
  14.   ingressClassName: nginx
  15.   rules:
  16.   - host: nsd.tedu.cn
  17.     http:
  18.       paths:
  19.       - path: /
  20.         pathType: Prefix
  21.         backend:
  22.           service:
  23.             name: websvc
  24.             port:
  25.               number: 80
  26. [root@master ~]# kubectl apply -f mying.yaml
  27. ingress.networking.k8s.io/mying created
  28. [root@master ~]# kubectl get ingress
  29. NAME    CLASS   HOSTS         ADDRESS        PORTS
  30. mying   nginx   nsd.tedu.cn   192.168.1.51   80
  31. [root@master ~]# curl -H "Host: nsd.tedu.cn" http://192.168.1.51
  32. Welcome to The Apache.
复制代码

三、Dashboard 安装


#下面给各人介绍下新的k8s插件
web 管理插件


安装 Dashboard

  
  1. [root@master ~]# cd plugins/dashboard
  2. [root@master dashboard]# docker load -i dashboard.tar.xz
  3. [root@master dashboard]# docker images|while read i t _;do
  4.     [[ "${t}" == "TAG" ]] && continue
  5.     [[ "${i}" =~ ^"harbor:443/".+ ]] && continue
  6.     docker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}
  7.     docker push harbor:443/plugins/${i##*/}:${t}
  8.     docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}
  9. done
  10. [root@master dashboard]# sed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/plugins/\3,' recommended.yaml
  11. 193:    image: kubernetesui/dashboard:v2.7.0
  12. 278:    image: kubernetesui/metrics-scraper:v1.0.8
  13. [root@master dashboard]# kubectl apply -f recommended.yaml
  14. [root@master dashboard]# kubectl -n kubernetes-dashboard get pods
  15. NAME                                         READY   STATUS    RESTARTS
  16. dashboard-metrics-scraper-66f6f56b59-b42ng   1/1     Running   0
  17. kubernetes-dashboard-65ff57f4cf-lwtsk        1/1     Running   0
复制代码
发布服务

  1. # 查看服务状态
  2. [root@master dashboard]# kubectl -n kubernetes-dashboard get service
  3. NAME                        TYPE        CLUSTER-IP       PORT(S)
  4. dashboard-metrics-scraper   ClusterIP   10.245.205.236   8000/TCP
  5. kubernetes-dashboard        ClusterIP   10.245.215.40    443/TCP
  6. # 获取服务资源对象文件
  7. [root@master dashboard]# sed -n '30,45p' recommended.yaml >dashboard-svc.yaml
  8. [root@master dashboard]# vim dashboard-svc.yaml
  9. ---
  10. kind: Service
  11. apiVersion: v1
  12. metadata:
  13.   labels:
  14.     k8s-app: kubernetes-dashboard
  15.   name: kubernetes-dashboard
  16.   namespace: kubernetes-dashboard
  17. spec:
  18.   type: NodePort
  19.   ports:
  20.     - port: 443
  21.       nodePort: 30443
  22.       targetPort: 8443
  23.   selector:
  24.     k8s-app: kubernetes-dashboard
  25. [root@master dashboard]# kubectl apply -f dashboard-svc.yaml
  26. service/kubernetes-dashboard configured
  27. [root@master dashboard]# kubectl -n kubernetes-dashboard get service
  28. NAME                        TYPE        CLUSTER-IP       PORT(S)
  29. dashboard-metrics-scraper   ClusterIP   10.245.205.236   8000/TCP
  30. kubernetes-dashboard        NodePort    10.245.215.40    443:30443/TCP
复制代码

  
  

  

  

  • #记得访问下仪表盘dashboard登录页面
  四、RBAC 权限管理

  
  服务账号与权限

  创建服务账号

  1. # 资源对象模板
  2. [root@master ~]# kubectl -n kubernetes-dashboard create serviceaccount kube-admin --dry-run=client -o yaml
  3. [root@master ~]# vim admin-user.yaml
  4. ---
  5. kind: ServiceAccount
  6. apiVersion: v1
  7. metadata:
  8.   name: kube-admin
  9.   namespace: kubernetes-dashboard
  10. [root@master ~]# kubectl apply -f admin-user.yaml
  11. serviceaccount/kube-admin created
  12. [root@master ~]# kubectl -n kubernetes-dashboard get serviceaccounts
  13. NAME                   SECRETS   AGE
  14. default                0         16m
  15. kube-admin             0         11s
  16. kubernetes-dashboard   0         16m
复制代码
获取用户 token

  1. [root@master ~]# kubectl -n kubernetes-dashboard create token kube-admin
  2. <Base64 编码的令牌数据>
复制代码


  脚色与鉴权

  

  

  

  #雷同网游DNF内里的脚色管理,GM管理员和玩家的关系。
  

     资源对象描述作用域ServiceAccount服务账号,为 Pod 中运行的进程提供了一个身份单一名称空间Role脚色,包含一组代表相关权限的规则单一名称空间ClusterRole脚色,包含一组代表相关权限的规则全集群RoleBinding将权限赋予用户,Role、ClusterRole 均可使用单一名称空间ClusterRoleBinding将权限赋予用户,只可以使用 ClusterRole全集群   资源对象权限
   createdeletedeletecollectiongetlistpatchupdatewatch创建删除删除集合获取属性获取列表补丁更新监控       普通脚色

  
  1. [root@master ~]# kubectl cluster-info dump |grep authorization-mode
  2.                             "--authorization-mode=Node,RBAC",
  3. # 资源对象模板
  4. [root@master ~]# kubectl -n default create role myrole --resource=pods --verb=get,list --dry-run=client -o yaml
  5. [root@master ~]# kubectl -n default create rolebinding kube-admin-role --role=myrole --serviceaccount=kubernetes-dashboard:kube-admin --dry-run=client -o yaml
  6. [root@master ~]# vim myrole.yaml
  7. ---
  8. kind: Role
  9. apiVersion: rbac.authorization.k8s.io/v1
  10. metadata:
  11.   name: myrole
  12.   namespace: default
  13. rules:
  14. - apiGroups:
  15.   - ""
  16.   resources:
  17.   - pods
  18.   verbs:
  19.   - get
  20.   - list
  21. ---
  22. kind: RoleBinding
  23. apiVersion: rbac.authorization.k8s.io/v1
  24. metadata:
  25.   name: kube-admin-role
  26.   namespace: default
  27. roleRef:
  28.   apiGroup: rbac.authorization.k8s.io
  29.   kind: Role
  30.   name: myrole
  31. subjects:
  32. - kind: ServiceAccount
  33.   name: kube-admin
  34.   namespace: kubernetes-dashboard
  35. [root@master ~]# kubectl apply -f myrole.yaml
  36. role.rbac.authorization.k8s.io/myrole created
  37. rolebinding.rbac.authorization.k8s.io/kube-admin-role created
  38. [root@master ~]# kubectl delete -f myrole.yaml
  39. role.rbac.authorization.k8s.io "myrole" deleted
  40. rolebinding.rbac.authorization.k8s.io "kube-admin-role" deleted
复制代码
  集群管理员

  
  1. [root@master ~]# kubectl get clusterrole
  2. NAME                              CREATED AT
  3. admin                             2022-06-24T08:11:17Z
  4. cluster-admin                     2022-06-24T08:11:17Z
  5. ... ...
  6. # 资源对象模板
  7. [root@master ~]# kubectl create clusterrolebinding kube-admin-role --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:kube-admin --dry-run=client -o yaml
  8. [root@master ~]# vim admin-user.yaml
  9. ---
  10. kind: ServiceAccount
  11. apiVersion: v1
  12. metadata:
  13.   name: kube-admin
  14.   namespace: kubernetes-dashboard
  15. ---
  16. kind: ClusterRoleBinding
  17. apiVersion: rbac.authorization.k8s.io/v1
  18. metadata:
  19.   name: kube-admin-role
  20. roleRef:
  21.   apiGroup: rbac.authorization.k8s.io
  22.   kind: ClusterRole
  23.   name: cluster-admin
  24. subjects:
  25. - kind: ServiceAccount
  26.   name: kube-admin
  27.   namespace: kubernetes-dashboard
  28. [root@master ~]# kubectl apply -f admin-user.yaml
  29. serviceaccount/kube-admin unchanged
  30. clusterrolebinding.rbac.authorization.k8s.io/kube-admin-role created
复制代码
  
    cloud 08


  1. #上一小节讲过K8S的有控制组件和计算组件。现在我们一起来深入研究K8S的控制组件。
复制代码
一、Deployment



资源清单文件

  1. [root@master ~]# kubectl create deployment myweb --image=myos:httpd --dry-run=client -o yaml
  2. [root@master ~]# vim mydeploy.yaml
  3. ---
  4. kind: Deployment          # 资源对象类型
  5. apiVersion: apps/v1       # 版本
  6. metadata:                 # 元数据
  7.   name: mydeploy          # 名称
  8. spec:                     # 详细定义
  9.   replicas: 3             # 副本数量
  10.   selector:               # 定义标签选择器
  11.     matchLabels:          # 支持 matchExpressions 表达式语法
  12.       app: deploy-httpd   # 通过标签来确定那个 Pod 由它来管理
  13.   template:               # 定义用来创建 Pod 的模板,以下为 Pod 定义
  14.     metadata:
  15.       labels:
  16.         app: deploy-httpd
  17.     spec:
  18.       containers:
  19.       - name: apache
  20.         image: myos:httpd
复制代码
配置案例

  1. # 创建控制器
  2. [root@master ~]# kubectl apply -f mydeploy.yaml
  3. deployment.apps/mydeploy created
  4. [root@master ~]# kubectl get deployments
  5. NAME       READY   UP-TO-DATE   AVAILABLE   AGE
  6. mydeploy   3/3     3            3           1s
  7. # 控制器自动创建 ReplicaSet
  8. [root@master ~]# kubectl get replicasets
  9. NAME                  DESIRED   CURRENT   READY   AGE
  10. mydeploy-76f96b85df   3         3         3       2s
  11. # 控制器自动创建 Pod
  12. [root@master ~]# kubectl get pods
  13. NAME                        READY   STATUS    RESTARTS   AGE
  14. mydeploy-76f96b85df-5gng9   1/1     Running   0          3s
  15. mydeploy-76f96b85df-vsfrw   1/1     Running   0          3s
  16. mydeploy-76f96b85df-z9x95   1/1     Running   0          3s
  17. # 集群自维护自治理
  18. [root@master ~]# kubectl delete pod --all
  19. pod "mydeploy-76f96b85df-5gng9" deleted
  20. pod "mydeploy-76f96b85df-vsfrw" deleted
  21. pod "mydeploy-76f96b85df-z9x95" deleted
  22. # 删除后自动重新创建
  23. [root@master ~]# kubectl get pods
  24. NAME                        READY   STATUS    RESTARTS   AGE
  25. mydeploy-76f96b85df-7dvwh   1/1     Running   0          7s
  26. mydeploy-76f96b85df-kpbz4   1/1     Running   0          7s
  27. mydeploy-76f96b85df-kr2zq   1/1     Running   0          7s
复制代码
集群服务

   

  1. # 创建集群服务
  2. [root@master ~]# vim websvc.yaml
  3. ---
  4. kind: Service
  5. apiVersion: v1
  6. metadata:
  7.   name: websvc
  8. spec:
  9.   type: ClusterIP
  10.   clusterIP: 10.245.1.80
  11.   selector:
  12.     app: deploy-httpd
  13.   ports:
  14.   - protocol: TCP
  15.     port: 80
  16.     targetPort: 80
  17. [root@master ~]# kubectl replace --force -f websvc.yaml
  18. service/websvc replaced
  19. [root@master ~]# curl -m 3 http://10.245.1.80
  20. Welcome to The Apache.
复制代码
集群扩缩容

  #抽象来说,扩容就是在底子存储装备上,添加新的装备,然后挂载到新的装备上。到达扩容结果, 雷同吃鸡游戏里的扩容弹夹。
  

  而缩容就是为了到达更佳的运行服从,淘汰存储装备上的存储空间,到达缩容目的。古代的增兵减灶
  1. # 集群扩容
  2. [root@master ~]# kubectl scale deployment mydeploy --replicas 10
  3. deployment.apps/mydeploy scaled
  4. [root@master ~]# kubectl get pods
  5. NAME                        READY   STATUS    RESTARTS   AGE
  6. mydeploy-76f96b85df-kg27l   1/1     Running   0          6s
  7. mydeploy-76f96b85df-q5fzb   1/1     Running   0          6s
  8. mydeploy-76f96b85df-rxhp4   1/1     Running   0          6s
  9. mydeploy-76f96b85df-szf69   1/1     Running   0          6s
  10. mydeploy-76f96b85df-tp2xj   1/1     Running   0          6s
  11. ......
  12. # 集群缩容
  13. [root@master ~]# kubectl scale deployment mydeploy --replicas=2
  14. deployment.apps/mydeploy scaled
  15. [root@master ~]# kubectl get pods
  16. NAME                        READY   STATUS    RESTARTS   AGE
  17. mydeploy-76f96b85df-7dvwh   1/1     Running   0          51s
  18. mydeploy-76f96b85df-kr2zq   1/1     Running   0          51s
复制代码
历史版本信息

  1. # 查看历史版本
  2. [root@master ~]# kubectl rollout history deployment mydeploy
  3. deployment.apps/mydeploy
  4. REVISION  CHANGE-CAUSE
  5. 1         <none>
  6. # 添加注释信息
  7. [root@master ~]# kubectl annotate deployments mydeploy kubernetes.io/change-cause="httpd.v1"
  8. deployment.apps/mydeploy annotated
  9. [root@master ~]# kubectl rollout history deployment mydeploy
  10. deployment.apps/mydeploy
  11. REVISION  CHANGE-CAUSE
  12. 1         httpd.v1
  13. # 更新资源清单文件
  14. [root@master ~]# vim mydeploy.yaml
  15. # 在创建容器的镜像下面添加
  16.         imagePullPolicy: Always
  17. [root@master ~]# kubectl apply -f mydeploy.yaml
  18. deployment.apps/mydeploy patched
  19. # 更新版本信息
  20. [root@master ~]# kubectl annotate deployments mydeploy kubernetes.io/change-cause="httpd.v2"
  21. deployment.apps/mydeploy annotated
  22. [root@master ~]# kubectl rollout history deployment mydeploy
  23. deployment.apps/mydeploy
  24. REVISION  CHANGE-CAUSE
  25. 1         httpd.v1
  26. 2         httpd.v2
复制代码
滚动更新

  1. # 修改镜像,滚动更新集群
  2. [root@master ~]# kubectl set image deployment mydeploy apache=myos:nginx
  3. deployment.apps/mydeploy image updated
  4. # 给新版本添加注释信息
  5. [root@master ~]# kubectl annotate deployments mydeploy kubernetes.io/change-cause="nginx.v1"
  6. deployment.apps/mydeploy annotated
  7. # 查看历史版本信息
  8. [root@master ~]# kubectl rollout history deployment mydeploy
  9. deployment.apps/mydeploy
  10. REVISION  CHANGE-CAUSE
  11. 1         httpd.v1
  12. 2         httpd.v2
  13. 3         nginx.v1
  14. # 访问验证服务
  15. [root@master ~]# curl -m 3 http://10.245.1.80
  16. Nginx is running !
复制代码
版本回滚

  #雷同游戏内里的怀旧服,而这里的版本回滚是用于规复数据
  1. # 历史版本与回滚
  2. [root@master ~]# kubectl rollout undo deployment mydeploy --to-revision 1
  3. deployment.apps/mydeploy rolled back
  4. [root@master ~]# kubectl rollout history deployment mydeploy
  5. deployment.apps/mydeploy
  6. REVISION  CHANGE-CAUSE
  7. 2         httpd.v2
  8. 3         nginx.v1
  9. 4         httpd.v1
  10. [root@master ~]# curl -m 3 http://10.245.1.80
  11. Welcome to The Apache.
复制代码

  清理资源对象

  1. # 删除控制器时会自动回收自己创建的 Pod
  2. [root@master ~]# kubectl delete deployments mydeploy
  3. deployment.apps "mydeploy" deleted
复制代码
二、DaemonSet


配置案例

  
  1. [root@master ~]# cp -a mydeploy.yaml myds.yaml
  2. [root@master ~]# vim myds.yaml
  3. ---
  4. kind: DaemonSet         # 资源对象类型
  5. apiVersion: apps/v1
  6. metadata:
  7.   name: myds            # 控制器名称
  8. spec:
  9.  # replicas: 2         # 删除副本参数
  10.   selector:
  11.    matchLabels:
  12.      app: ds-httpd     # 修改标签防止冲突
  13.   template:
  14.    metadata:
  15.      labels:
  16.        app: ds-httpd   # 修改标签防止冲突
  17.    spec:
  18.      containers:
  19.      - name: apache
  20.        image: myos:httpd
  21.        imagePullPolicy: Always
  22. [root@master ~]# kubectl apply -f myds.yaml
  23. daemonset.apps/myds created
  24. [root@master ~]# kubectl get pods -o wide
  25. NAME         READY   STATUS    RESTARTS   IP            NODE
  26. myds-msrcx   1/1     Running   0          10.244.1.11   node-0001
  27. myds-lwq8l   1/1     Running   0          10.244.2.17   node-0002
  28. myds-4wt72   1/1     Running   0          10.244.3.14   node-0003
  29. myds-6k82t   1/1     Running   0          10.244.4.15   node-0004
  30. myds-9c6wc   1/1     Running   0          10.244.5.19   node-0005
复制代码
清理资源对象

  1. # 删除控制器
  2. [root@master ~]# kubectl delete daemonsets myds
  3. daemonset.apps "myds" deleted
复制代码

三、Job、CronJob

 

 Job 控制器

  1. # 资源文件模板
  2. [root@master ~]# kubectl create job myjob --image=myos:8.5 --dry-run=client -o yaml -- sleep 3
  3. [root@master ~]# vim myjob.yaml
  4. ---
  5. kind: Job
  6. apiVersion: batch/v1
  7. metadata:
  8.   name: myjob
  9. spec:
  10.   template:  # 以下定义 Pod 模板
  11.     metadata: {}
  12.     spec:
  13.       restartPolicy: OnFailure
  14.       containers:
  15.       - name: myjob
  16.         image: myos:8.5
  17.         command: ["/bin/sh"]
  18.         args:
  19.         - -c
  20.         - |
  21.           sleep 3
  22.           exit $((RANDOM%2))
  23. [root@master ~]# kubectl apply -f myjob.yaml
  24. job.batch/myjob created
  25. # 失败了会重启
  26. [root@master ~]# kubectl get pods -l job-name=myjob -w
  27. NAME             READY   STATUS      RESTARTS     AGE
  28. myjob--1-lrtbk   1/1     Running     0            2s
  29. myjob--1-lrtbk   0/1     Error       0            4s
  30. myjob--1-lrtbk   1/1     Running     1 (1s ago)   5s
  31. myjob--1-lrtbk   0/1     Completed   1            9s
  32. [root@master ~]# kubectl get jobs.batch
  33. NAME    COMPLETIONS   DURATION   AGE
  34. myjob   1/1           8s         12s
  35. # 删除Job控制器
  36. [root@master ~]# kubectl delete -f myjob.yaml
  37. job.batch "myjob" deleted
复制代码
#pod控制器创建失败,任务会确保创建成功而重启,制止失败

Cronjob

  1. #类似ansible中的crontab模块,可以定时执行某一任务
复制代码
  配置案例

  1. # 资源对象模板
  2. [root@master ~]# kubectl create cronjob mycj --image=myos:8.5 --schedule='* * * * *' --dry-run=client -o yaml -- sleep 3
  3. [root@master ~]# vim mycj.yaml
  4. ---
  5. kind: CronJob
  6. apiVersion: batch/v1
  7. metadata:
  8.   name: mycj
  9. spec:
  10.   schedule: "* * * * *"
  11.   jobTemplate:  # 以下定义 Job 模板
  12.     metadata: {}
  13.     spec:
  14.       template:
  15.         metadata: {}
  16.         spec:
  17.           restartPolicy: OnFailure
  18.           containers:
  19.           - name: myjob
  20.             image: myos:8.5
  21.             command: ["/bin/sh"]
  22.             args:
  23.             - -c
  24.             - |
  25.               sleep 3
  26.               exit $((RANDOM%2))
  27. [root@master ~]# kubectl apply -f mycj.yaml
  28. cronjob.batch/mycj created
  29. [root@master ~]# kubectl get cronjobs
  30. NAME   SCHEDULE        SUSPEND   ACTIVE   LAST SCHEDULE   AGE
  31. mycj   * * * * 1-5     False     0        <none>          4s
  32. # 按照时间周期,每分钟触发一个任务
  33. [root@master ~]# kubectl get jobs -w
  34. NAME                     READY   STATUS              RESTARTS
  35. mycj-27808172--1-w6sbx   0/1     Pending             0
  36. mycj-27808172--1-w6sbx   0/1     ContainerCreating   0
  37. mycj-27808172--1-w6sbx   1/1     Running             0
  38. mycj-27808172--1-w6sbx   0/1     Completed           1
  39. # 保留三次结果,多余的会被删除
  40. [root@master ~]# kubectl get jobs
  41. NAME            COMPLETIONS   DURATION   AGE
  42. mycj-27605367   1/1           31s        3m30s
  43. mycj-27605368   1/1           31s        2m30s
  44. mycj-27605369   1/1           31s        90s
  45. mycj-27605370   0/1           30s        30s
  46. [root@master ~]# kubectl get jobs
  47. NAME            COMPLETIONS   DURATION   AGE
  48. mycj-27605368   1/1           31s        2m33s
  49. mycj-27605369   1/1           31s        93s
  50. mycj-27605370   1/1           31s        33s
  51. # 删除CJ控制器
  52. [root@master ~]# kubectl delete -f mycj.yaml
  53. cronjob.batch "mycj" deleted
复制代码
四、StatefulSet

   

  Headless 服务

  1. [root@master ~]# cp websvc.yaml stssvc.yaml
  2. [root@master ~]# vim stssvc.yaml
  3. ---
  4. kind: Service
  5. apiVersion: v1
  6. metadata:
  7.   name: stssvc          # 服务名称
  8. spec:
  9.   type: ClusterIP
  10.   clusterIP: None       # 设置 IP 为 None
  11.   selector:
  12.     app: sts-httpd      # 设置 Pod 标签
  13.   ports:
  14.   - protocol: TCP
  15.     port: 80
  16.     targetPort: 80
  17. [root@master ~]# kubectl apply -f stssvc.yaml
  18. service/stssvc created
  19. [root@master ~]# kubectl get services stssvc
  20. NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
  21. stssvc       ClusterIP   None          <none>        80/TCP    51s
复制代码
资源清单文件

  1. [root@master ~]# cp -a mydeploy.yaml mysts.yaml
  2. [root@master ~]# vim mysts.yaml
  3. ---
  4. kind: StatefulSet       # 资源对象类型
  5. apiVersion: apps/v1
  6. metadata:
  7.   name: mysts           # 控制器名称
  8. spec:
  9.   serviceName: stssvc   # 新增 headless 服务名称
  10.   replicas: 3
  11.   selector:
  12.     matchLabels:
  13.       app: sts-httpd    # 修改标签防止冲突
  14.   template:
  15.     metadata:
  16.       labels:
  17.         app: sts-httpd  # 修改标签防止冲突
  18.     spec:
  19.       containers:
  20.       - name: apache
  21.         image: myos:httpd
复制代码
配置案例

  1. # statefulset 主要解决了 Pod 创建顺序的问题
  2. # statefulset 主要解决了访问指定 Pod 的问题
  3. [root@master ~]# kubectl apply -f mysts.yaml
  4. statefulset.apps/mysts created
  5. [root@master ~]# kubectl get pods
  6. NAME      READY   STATUS    RESTARTS   AGE
  7. mysts-0   1/1     Running   0          3s
  8. mysts-1   1/1     Running   0          2s
  9. mysts-2   1/1     Running   0          1s
  10. # 所有 Pod IP 地址
  11. [root@master ~]# host stssvc.default.svc.cluster.local 10.245.0.10
  12. Using domain server:
  13. Name: 10.245.0.10
  14. Address: 10.245.0.10#53
  15. Aliases:
  16. stssvc.default.svc.cluster.local has address 10.244.1.81
  17. stssvc.default.svc.cluster.local has address 10.244.2.82
  18. stssvc.default.svc.cluster.local has address 10.244.3.83
  19. # 单个 Pod IP 地址
  20. [root@master ~]# host mysts-0.stssvc.default.svc.cluster.local 10.245.0.10
  21. Using domain server:
  22. Name: 10.245.0.10
  23. Address: 10.245.0.10#53
  24. Aliases:
  25. mysts-0.stssvc.default.svc.cluster.local has address 10.244.1.81
  26. # 删除sts控制器
  27. [root@master ~]# kubectl delete -f mysts.yaml -f stssvc.yaml
  28. statefulset.apps "mysts" deleted
  29. service "stssvc" deleted
  30. 弹性云服务
复制代码
五、HorizontalPodAutoscaler

  

   配置后端服务

  1. # 为 Deploy 模板添加资源配额
  2. [root@master ~]# cat mydeploy.yaml websvc.yaml >mycluster.yaml
  3. [root@master ~]# vim mycluster.yaml
  4. ---
  5. kind: Deployment
  6. apiVersion: apps/v1
  7. metadata:
  8.   name: mydeploy
  9. spec:
  10.   replicas: 1
  11.   selector:
  12.     matchLabels:
  13.       app: deploy-httpd
  14.   template:
  15.     metadata:
  16.       labels:
  17.         app: deploy-httpd
  18.     spec:
  19.       containers:
  20.       - name: apache
  21.         image: myos:httpd
  22.         resources:           # 为该资源设置配额
  23.           requests:          # HPA 控制器会根据配额使用情况伸缩集群
  24.             cpu: 300m        # CPU 配额
  25. ---
  26. kind: Service
  27. apiVersion: v1
  28. metadata:
  29.   name: websvc
  30. spec:
  31.   type: ClusterIP
  32.   clusterIP: 10.245.1.80
  33.   selector:
  34.     app: deploy-httpd
  35.   ports:
  36.   - protocol: TCP
  37.     port: 80
  38.     targetPort: 80
  39. [root@master ~]# kubectl replace --force -f mycluster.yaml
  40. deployment.apps/mydeploy replaced
  41. service/websvc replaced
  42. # 验证服务
  43. [root@master ~]# kubectl top pods
  44. NAME                       CPU(cores)   MEMORY(bytes)   
  45. mydeploy-b4f9dc786-w4x2z   6m           18Mi            
  46. [root@master ~]# curl -s http://10.245.1.80/info.php
  47. <pre>
  48. Array
  49. (
  50.     [REMOTE_ADDR] => 10.244.219.64
  51.     [REQUEST_METHOD] => GET
  52.     [HTTP_USER_AGENT] => curl/7.61.1
  53.     [REQUEST_URI] => /info.php
  54. )
  55. php_host:   mydeploy-b4f9dc786-w4x2z
  56. 1229
复制代码
HPA 控制器

  
  1. [root@master ~]# vim myhpa.yaml
  2. ---
  3. kind: HorizontalPodAutoscaler
  4. apiVersion: autoscaling/v2
  5. metadata:
  6.   name: myhpa
  7. spec:
  8.   behavior:
  9.     scaleDown:
  10.       stabilizationWindowSeconds: 60
  11.   scaleTargetRef:
  12.     kind: Deployment
  13.     apiVersion: apps/v1
  14.     name: mydeploy
  15.   minReplicas: 1
  16.   maxReplicas: 5
  17.   metrics:
  18.   - type: Resource
  19.     resource:
  20.       name: cpu
  21.       target:
  22.         type: Utilization
  23.         averageUtilization: 50
  24. [root@master ~]# kubectl apply -f myhpa.yaml
  25. horizontalpodautoscaler.autoscaling/myhpa created
  26. # 刚刚创建 unknown 是正常现象,最多等待 60s 就可以正常获取数据
  27. [root@master ~]# kubectl get horizontalpodautoscalers
  28. NAME    REFERENCE             TARGETS         MINPODS   MAXPODS   REPLICAS
  29. myhpa   Deployment/mydeploy   <unknown>/50%   1         5         0
  30. [root@master ~]# kubectl get horizontalpodautoscalers
  31. NAME    REFERENCE             TARGETS   MINPODS   MAXPODS   REPLICAS
  32. myhpa   Deployment/mydeploy   0%/50%    1         5         3
复制代码
配置案例

  

  1. # 终端 1 访问提高负载
  2. [root@master ~]# while sleep 1;do curl -s "http://10.245.1.80/info.php?id=100000" -o /dev/null; done &
  3. # 终端 2 监控 HPA 变化
  4. [root@master ~]# kubectl get hpa -w
  5. NAME    REFERENCE             TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
  6. myhpa   Deployment/mydeploy   0%/50%    1         5         1          1m
  7. myhpa   Deployment/mydeploy   31%/50%   1         5         1          2m
  8. myhpa   Deployment/mydeploy   70%/50%   1         5         1          2m15s
  9. myhpa   Deployment/mydeploy   72%/50%   1         5         2          2m30s
  10. myhpa   Deployment/mydeploy   36%/50%   1         5         2          2m45s
  11. myhpa   Deployment/mydeploy   55%/50%   1         5         2          3m
  12. myhpa   Deployment/mydeploy   58%/50%   1         5         3          3m15s
  13. myhpa   Deployment/mydeploy   39%/50%   1         5         3          3m30s
  14. ... ...
  15. myhpa   Deployment/mydeploy   66%/50%   1         5         4          5m
  16. myhpa   Deployment/mydeploy   68%/50%   1         5         5          5m15s
  17. myhpa   Deployment/mydeploy   55%/50%   1         5         5          5m30s
  18. myhpa   Deployment/mydeploy   58%/50%   1         5         5          5m45s
  19. myhpa   Deployment/mydeploy   62%/50%   1         5         5          6m
  20. # 如果 60s 内平均负载小于标准值,就会自动缩减集群规模
  21. [root@master ~]# kubectl get hpa -w
  22. NAME    REFERENCE             TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
  23. myhpa   Deployment/mydeploy   52%/50%   1         5         5          13m
  24. myhpa   Deployment/mydeploy   44%/50%   1         5         5          13m15s
  25. myhpa   Deployment/mydeploy   38%/50%   1         5         5          13m30s
  26. myhpa   Deployment/mydeploy   35%/50%   1         5         5          13m45s
  27. myhpa   Deployment/mydeploy   28%/50%   1         5         5          14m
  28. ... ...
  29. myhpa   Deployment/mydeploy   8%/50%    1         5         5          18m30s
  30. myhpa   Deployment/mydeploy   9%/50%    1         5         4          18m45s
  31. myhpa   Deployment/mydeploy   9%/50%    1         5         4          19m
  32. myhpa   Deployment/mydeploy   12%/50%   1         5         3          19m15s
  33. myhpa   Deployment/mydeploy   15%/50%   1         5         3          19m30s
  34. myhpa   Deployment/mydeploy   18%/50%   1         5         2          19m45s
  35. myhpa   Deployment/mydeploy   33%/50%   1         5         1          20m
复制代码

课后总结:

#我们本节学的好多控制器,都有差异和区别,可以按照雷同以下的提示词,来对AI提问,得到更加符合工作使用情况的答复。



至此云盘算cloud二周目内容更新完毕!
各人有想练习的,可以去华为云、阿里云等云平台,创建帐号,使用30天免费体验版云产品
熟悉相关云产品的使用与配置,内里也有一些项目的免费体验课,可以照着案例学基本项目架构
下一阶段,将回重回网络阶段,深入了解云盘算与云原生领域的网络架构知识.
                        
下个阶段见!!!   

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表