网站制作怎么自己做,网站产品网页设计模板,网站开发外包维护合同,网站索引下降如何解决昨日内容回顾: - configMap --- cm 应用场景: 主要用于配置文件的持久化。 - secret 应用场景: 存储敏感数据#xff0c;并非加密数据。 - pod探针#xff08;probe#xff09;: - livenessProbe: 健康检查探针#x…昨日内容回顾: - configMap --- cm 应用场景: 主要用于配置文件的持久化。 - secret 应用场景: 存储敏感数据并非加密数据。 - pod探针probe: - livenessProbe: 健康检查探针若检查失败则会重启容器重新创建容器。 值得注意的是若手动去使用docker去kill容器是否会重启取决于重启策略注意尽管重新拉起容器会计数重启次数。 - readinessProbe 可用性检查探针若检查失败则将容器标记为未就绪状态与此同时对于svc的ep资源列表不会自动发现; - env获取cm或者secret资源的值
Q1: 请问Pod导入secret资源有几种方式? - env - volume Q2: 请问cm资源有几种定义方式? - 单行模式 KEY: VALUE - 多行模式类文件模式 KEY : | ... ... ...
Q3: 外网访问K8S集群的Pod有多少种方式? - hostNetwork - hostPort --- 1.5.2有效 1.15.12则无效【了解即可】 - Svc - Ing - ApiServer Q4: 影响Pod调度的方式有哪些? - nodeName - resources - 污点 - 污点容忍 - 亲和性 - 反亲和性 - 自定义调度器 - 工作负载调度器 --- ds,deploy ... kubectl version 查看K8S的版本号。 GitVersion:v1.5.2, BuildDate:2017-07-03T15:31:10Z GitVersion:v1.15.12, BuildDate:2020-05-06T05:09:48Z [rootk8s151.oldboyedu.com po]# cat 22-pods-ports.yaml kind: Pod apiVersion: v1 metadata: name: oldboyedu-linux82-ports-001 spec: nodeName: k8s152.oldboyedu.com containers: - name: linux82-web image: k8s151.oldboyedu.com:5000/oldboyedu-web/nginx:1.20.1 # 定义容器的端口映射相关信息 ports: # 容器内服务监听的端口 - containerPort: 80 # 指定绑定的宿主机IP地址 hostIP: 0.0.0.0 # 指定宿主机的端口 hostPort: 18888 # 给映射的端口起名字要求唯一 name: myweb # 指定协议有效值为: UDP, TCP, or SCTP. protocol: TCP [rootk8s151.oldboyedu.com po]# 容器的三种类型: 网络基础镜像容器: pause:v3.1 --- 提供网络基础的。 初始化容器: initContainers --- 为业务容器提供基础环境准备的。 业务容器: containers --- 跑实际业务。 初始化容器参考案例: [rootk8s151.oldboyedu.com po]# cat 23-pods-initContainers.yaml ---
apiVersion: v1 data: .dockerconfigjson: eyJhdXRocyI6eyIxMC4wLjAuMjUwIjp7InVzZXJuYW1lIjoiamFzb255aW4yMDIwIiwicGFzc3dvcmQiOiJPbGRib3llZHVAMjAyMiIsImVtYWlsIjoiamFzb255aW5Ab2xkYm95ZWR1LmNvbSIsImF1dGgiOiJhbUZ6YjI1NWFXNHlNREl3T2s5c1pHSnZlV1ZrZFVBeU1ESXkifX19 kind: Secret metadata: name: oldboyedu-harbor type: kubernetes.io/dockerconfigjson ---
kind: Pod apiVersion: v1 metadata: name: oldboyedu-linux82-initcontianer-002 spec: nodeName: k8s152.oldboyedu.com imagePullSecrets: - name: oldboyedu-harbor # 初始化容器为业务容器提供基础环境准备的。 initContainers: - name: init-web image: 10.0.0.250/oldboyedu-linux/stress:v0.1 command: - sleep - 30 # 我们可以将containers理解为业务容器。初始化容器要先于业务容器运行。 containers: - name: linux82-web image: k8s151.oldboyedu.com:5000/oldboyedu-web/nginx:1.20.1 # 定义容器的端口映射相关信息 ports: # 容器内服务监听的端口 - containerPort: 80 # 指定绑定的宿主机IP地址 hostIP: 0.0.0.0 # 指定宿主机的端口,k8s1.5.2会监听端口,K8S1.15.12不会监听端口但能访问哟! hostPort: 28888 # 给映射的端口起名字要求唯一 name: myweb # 指定协议有效值为: UDP, TCP, or SCTP. protocol: TCP [rootk8s151.oldboyedu.com po]# 静态Pod: vim /var/lib/kubelet/config.yaml ... staticPodPath: /etc/kubernetes/manifests
温馨提示: (1)静态Pod是由kubelet启动时通过staticPodPath配置参数指定路径 (2)静态Pod创建的Pod名称会自动加上kubelet节点的主机名比如-k8s151.oldboyedu.com会忽略nodeName字段哟; (3)静态Pod的创建并不依赖API-Server而是直接基于kubelet所在节点来启动Pod; (4)静态Pod的删除只需要将其从staticPodPath指定的路径移除即可; (5)静态Pod路径仅对Pod资源类型有效其他类型资源将不被创建哟 (6)咱们的kubeadm部署方式就是基于静态Pod部署的哟;
rc简介: replicationcontrollers控制器简称rc可以保证指定数量的Pod始终存活rc通过标签选择器来关联Pod。 [rootk8s151.oldboyedu.com rc]# cat 01-rc-nginx.yaml kind: ReplicationController apiVersion: v1 metadata: name: oldboyedu-linux82-rc-web spec: # 指定Pod的副本数量若不指定则默认值为1. replicas: 3 # 定义标签选择器即用于关联Pod的标签。 selector: school: oldboyedu # 定义Pod的模板 template: metadata: name: linux82-web labels: school: oldboyedu class: linux82 spec: # nodeName: k8s152.oldboyedu.com containers: - name: linux82-web image: k8s151.oldboyedu.com:5000/oldboyedu-web/nginx:1.20.1 [rootk8s151.oldboyedu.com rc]# 创建RS资源用于测试svc: [rootk8s151.oldboyedu.com rs]# cat 01-rs-nginx.yaml kind: ReplicaSet apiVersion: extensions/v1beta1 metadata: name: oldboyedu-linux82-rs-web spec: # 指定Pod的副本数量若不指定则默认值为1. replicas: 3 # 定义标签选择器即用于关联Pod的标签。 selector: # 相比于rc资源rs资源支持的功能更加强大不仅仅支持标签选择器还支持表达式matchExpressions matchLabels: school: oldboyedu # 定义Pod的模板 template: metadata: name: linux82-web labels: school: oldboyedu class: linux82 spec: # nodeName: k8s152.oldboyedu.com containers: - name: linux82-web image: k8s151.oldboyedu.com:5000/oldboyedu-web/nginx:1.20.1 livenessProbe: tcpSocket: port: 80 failureThreshold: 3 initialDelaySeconds: 15 periodSeconds: 1 successThreshold: 1 timeoutSeconds: 1 readinessProbe: httpGet: port: 80 path: /oldboyedu.html failureThreshold: 3 initialDelaySeconds: 15 periodSeconds: 1 successThreshold: 1 timeoutSeconds: 1 [rootk8s151.oldboyedu.com rs]# 创建svc资源: [rootk8s151.oldboyedu.com rs]# cat ../svc/01-svc-nginx.yaml apiVersion: v1 kind: Service metadata: name: linux82-svc-web spec: # 映射Pod端口信息 ports: # 指定SVC的端口 - port: 9999 # 指定Pod提供服务的端口 targetPort: 80 # 指定标签用于匹配关联的POD selector: class: linux82 [rootk8s151.oldboyedu.com rs]#
查看所有的svc: kubectl get svc 查看指定svc的详细信息 kubectl describe svc linux82-svc-web rc资源有两大缺陷: (1)不支持声明式更新镜像; (2)升级的时候有时候需要运维人员介入解决svc无法自动关联Pod的现象; 为了避免这种现象发生将rc资源的selector和svc的selector定义成不一样的关联即可。见视频。
基于rc升级和回滚: 1.创建原始版本 kubectl apply -f 01-rc-svc.yaml -f 02-rc-nginx-old.yaml
2.测试访问服务 curl -I 10.0.0.53:30088 3.升级 kubectl rolling-update oldboyedu-linux82-rc-web-old -f 03-rc-nginx-update-new.yaml --update-period1s oldboyedu-linux82-rc-web-old 表示现有的rc名称。 -f 03-rc-nginx-update-new.yaml 基于哪个文件升级或回滚。 --update-period1s 升级的间隔时间。
4.升级后运行需要解决用户无法访问Pod的情况 方案一: 使用旧的svc即给新的pod打标签。 kubectl label pods --all classlinux82 # kubectl label pods --all class- # 删除标签 方案二: 使用新的svc。 kubectl delete -f 01-rc-svc.yaml kubectl apply -f 04-rc-svc-new.yaml 5.回滚 kubectl rolling-update oldboyedu-linux82-rc-web-new -f 02-rc-nginx-old.yaml --update-period1s kubectl delete -f 04-rc-svc-new.yaml kubectl apply -f 01-rc-svc.yaml
资源清单: [rootk8s151.oldboyedu.com test]# cat 01-rc-svc.yaml apiVersion: v1 kind: Service metadata: name: linux82-svc-web-nodeport-002 spec: type: NodePort ports: - port: 9999 targetPort: 80 nodePort: 30088 selector: class: linux82 [rootk8s151.oldboyedu.com test]# [rootk8s151.oldboyedu.com test]# cat 02-rc-nginx-old.yaml kind: ReplicationController apiVersion: v1 metadata: name: oldboyedu-linux82-rc-web-old spec: # 指定Pod的副本数量若不指定则默认值为1. replicas: 3 # 定义标签选择器即用于关联Pod的标签。 selector: school: oldboyedu # 定义Pod的模板 template: metadata: name: linux82-web labels: school: oldboyedu class: linux82 spec: # nodeName: k8s152.oldboyedu.com containers: - name: linux82-web image: k8s151.oldboyedu.com:5000/oldboyedu-web/nginx:1.14 [rootk8s151.oldboyedu.com test]# [rootk8s151.oldboyedu.com test]# cat 03-rc-nginx-update-new.yaml kind: ReplicationController apiVersion: v1 metadata: name: oldboyedu-linux82-rc-web-new spec: replicas: 3 selector: school: oldboyedu-new template: metadata: name: linux82-web labels: school: oldboyedu-new address: beijing-linux82 spec: containers: - name: linux82-web image: k8s151.oldboyedu.com:5000/oldboyedu-web/nginx:1.16 [rootk8s151.oldboyedu.com test]# [rootk8s151.oldboyedu.com test]# cat 04-rc-svc-new.yaml apiVersion: v1 kind: Service metadata: name: linux82-svc-web-nodeport-002-new spec: type: NodePort ports: - port: 9999 targetPort: 80 nodePort: 30088 selector: school: oldboyedu-new address: beijing-linux82 [rootk8s151.oldboyedu.com test]# deoloyment资源控制器 --- 声明式更新 [rootk8s151.oldboyedu.com deploy]# cat 01-deploy-nginx.yaml kind: Deployment apiVersion: extensions/v1beta1 metadata: name: oldboyedu-linux82-deploy-nginx spec: replicas: 3 selector: matchLabels: school: oldboyedu template: metadata: name: linux82-web labels: school: oldboyedu class: linux82 spec: containers: - name: linux82-web # image: k8s151.oldboyedu.com:5000/oldboyedu-web/nginx:1.20.1 image: k8s151.oldboyedu.com:5000/oldboyedu-web/nginx:1.18 livenessProbe: tcpSocket: port: 80 failureThreshold: 3 initialDelaySeconds: 15 periodSeconds: 1 successThreshold: 1 timeoutSeconds: 1 # readinessProbe: # httpGet: # port: 80 # path: /oldboyedu.html # failureThreshold: 3 # initialDelaySeconds: 15 # periodSeconds: 1 # successThreshold: 1 # timeoutSeconds: 1
---
apiVersion: v1 kind: Service metadata: name: linux82-svc-web-nodeport-002 spec: type: NodePort clusterIP: 10.254.100.100 ports: - port: 9999 targetPort: 80 nodePort: 30088 selector: class: linux82 [rootk8s151.oldboyedu.com deploy]#
响应式更新: kubectl set image deploy oldboyedu-linux82-deploy-nginx linux82-webk8s151.oldboyedu.com:5000/oldboyedu-web/nginx:1.16 kubectl set image 资源类型 资源类型名称 容器名称镜像名称 基于edit编辑: kubectl edit deployments. oldboyedu-linux82-deploy-nginx 副本数量 old : 5 new : 5 附加条件 old --- new : - 5 2 --- 7 升级过程中最大的pod - 5 - 1 --- 4 最少保证4个可用。
升级需要几次请说明原因: 第一次升级: old : 3 5 4 5 2 --- 4 new : 2 2 2 2 3 --- 3 第二次升级 old: 3 0 4 2 1 3 6 --- 1 new: 4 7 2 5 6 4 4 --- 3 2 --- 5 ... replicas: 8 maxSurge: 5 maxUnavailable: 3
---- 第一次升级 old : 5 new : 8
replicas: 7 maxSurge: 2 --- max --- 9 maxUnavailable: 3 --- min --- 4 第一次升级: old: 4 new: 5 第二次升级: old: 0 new: 5 2 -- 7 基于deployment升级: [rootk8s151.oldboyedu.com deploy]# cat 02-deploy-nginx-update-strategy.yaml kind: Deployment apiVersion: extensions/v1beta1 metadata: name: oldboyedu-linux82-deploy-nginx-strategy spec: replicas: 5 selector: matchLabels: school: oldboyedu # 定义升级策略 strategy: # 升级的类型,Recreate or RollingUpdate # Recreate: # 先停止所有的Pod运行然后在批量创建更新。 # 生产环节中不推荐使用这种策略因为升级过程中用户将无法访问服务! # RollingUpdate: # 滚动更新即先实现部分更新逐步替换原有的pod是默认策略。 type: RollingUpdate # 自定义滚动更新的策略 rollingUpdate: # 在原有Pod的副本基础上多启动Pod的数量。 maxSurge: 2 # 在升级过程中最大不可访问的Pod数量. maxUnavailable: 1 template: metadata: name: linux82-web labels: school: oldboyedu class: linux82 spec: containers: - name: linux82-web # image: k8s151.oldboyedu.com:5000/oldboyedu-web/nginx:1.20.1 # image: k8s151.oldboyedu.com:5000/oldboyedu-web/nginx:1.18 image: nginx:1.14 livenessProbe: tcpSocket: port: 80 failureThreshold: 3 initialDelaySeconds: 15 periodSeconds: 1 successThreshold: 1 timeoutSeconds: 1 # readinessProbe: # httpGet: # port: 80 # path: /oldboyedu.html # failureThreshold: 3 # initialDelaySeconds: 15 # periodSeconds: 1 # successThreshold: 1 # timeoutSeconds: 1
---
apiVersion: v1 kind: Service metadata: name: linux82-svc-web-nodeport-002 spec: type: NodePort clusterIP: 10.254.100.100 ports: - port: 9999 targetPort: 80 nodePort: 30088 selector: class: linux82 扩展作业: (1)使用阿里云部署K8S集群并将11个游戏将部署到云平台提供访问要求使用svc的类型为LoadBalancer。 (2)使用kubeadm1.15或Kubeadm 1.19版本将其etcd数据库独立部署出来不要使用内置的; (3)调研K3S二进制部署K3S是轻量级的K8S发行版; (4)部署ranger管理K8S集群; 常见错误: PodFitsHostPorts: 问题原因: 和Pod调度节点的端口有所冲突。 解决方案: 可能无法提供给ss -ntl来观察需要借助iptables -t nat -vnL来观察哟。 Init:ErrImagePull 问题原因: 初始化容器拉取镜像失败。 解决方案: 一般情况下请检查网络权限等维度即可。