replicationcontrollers
| RC 控制器概述
Replication Controller 会持续监控正在运行的pod列表, 并保证相应 ” 类型” 的 pod的数目与期望相符(多了删除,少了新增)
所谓的类型就是通过标签选择器监控模板中指定标签的pod的数量
注意:
| RC 的三部分
label selector (标签选择器):用于确定ReplicationController作用域中有哪些pod
replica count (副本个数):指定应运行的pod 数量
pod template (pod模板):用于创建新的pod 副本
注意:
1、ReplicationController 的副本个数、标签选择器,甚至是 pod模板都可以随时修改,但只有副本数目的变更会影响现有的 pod
2、更改标签选择器和pod模板对现有 pod 没有影响
3、修改Pod 的标签,pod 就会脱离了RC控制,然后PC 会新建一个pod,给pod 添加新的标签不影响RC对pod 的管理
4、修改了 ReplicationController 的标签选择器,那么原有的pod 脱离RC控制,然后RC会新创建几个新的 pod
| RC 的作用
RC资源创建
| 编写rc的测试文件
apiVersion: v1 kind: ReplicationController metadata:name: oldboyedu-nginx spec:replicas: 5selector: app: oldboyedu-web template: metadata: labels: app: oldboyedu-web spec: containers: - name: oldboyedu-linux-web image: 10.0.0.101:5000/nginx:1.20.1 ports: - containerPort: 80
| 使用 RC 资源
# 启动kubectl apply -f 01-nginx-rc.yml# 删除Pod测试RC控制器是否会自动拉起新的Pod(删除效果如下图所示)kubectl delete pod oldboyedu-nginx-05z64 kubectl delete pod oldboyedu-nginx-zdhqk

| 编写rc升级版本的配置文件
# 编写rc升级版本的配置文件cat >02-nginx-rc.yml<<EOF apiVersion: v1 kind: ReplicationController metadata:name: oldboyedu-nginx-2022spec:replicas: 5selector: app: oldboyedu-web-2022template: metadata: labels: app: oldboyedu-web-2022 spec: containers: - name: oldboyedu-linux-web-2022 image: 10.0.0.101:5000/nginx:1.20.1 ports: - containerPort: 80EOF# 滚动升级kubectl rolling-update oldboyedu-nginx -f 02-nginx-rc.yml --update-period=10s

滚动升级相关参数说明:

使用 rc 实现滚动回滚
kubectl rolling-update oldboyedu-nginx-2022 -f 01-nginx-rc.yml --update-period=1s
温馨提示:
如下图所示,其实升级和回滚基本上都是一个套路,基本上命令参数都相同,只不过指定不同的资源清单和基于哪个对象进行回滚而已

ReplicaSet
| RS 介绍
Replication Set简称RS,随着Kubernetes的高速发展,官方已经推荐我们使用RS和Deployment来代替RC了,实际上RS和RC的功能基本一致,目前唯一的一个区别就是RC只支持基于等式的selector(env=dev或environment!=qa),但RS还支持基于集合的selector(version in (v1.0, v2.0)),这对复杂的运维管理就非常方便了
kubectl命令行工具中关于RC的大部分命令同样适用于我们的RS资源对象
不过我们也很少会去单独使用RS,它主要被Deployment这个更加高层的资源对象使用,除非用户需要自定义升级功能或根本不需要升级Pod,在一般情况下,我们推荐使用Deployment而不直接使用Replica Set
这里总结下关于RC/RS的一些特性和作用:
| rs参考案例
apiVersion: extensions/v1beta1 kind: ReplicaSet metadata:name: oldboyedu-linux-rs spec: # 指定创建Pod的副本数量,默认值为1.replicas: 1 # 定义标签选择器,rs资源基于标签选择器关联对应的Podselector: matchLabels: apps: oldboyedu-web # 定义Pod资源创建的模板template: metadata: name: linux-pod labels: apps: oldboyedu-web spec: containers: - name: linux-web image: nginx:1.20.1
Deployment
| deploy介绍
在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的
Pod控制器用于Pod的管理,确保Pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建Pod
| deploy的作用

deploy资源创建
| deploy参考案例
apiVersion: extensions/v1beta1 kind: Deployment metadata:name: oldboyedu-linux-deploy spec: # 指定创建Pod的副本数量,默认值为1.replicas: 3 # 定义标签选择器,rs资源基于标签选择器关联对应的Pod哟~selector: matchLabels: apps: oldboyedu-web # 定义Pod资源创建的模板template: metadata: name: linux-pod labels: apps: oldboyedu-web spec: containers: - name: linux-web image: nginx:1.18
| deploy升级策略
apiVersion: extensions/v1beta1 kind: Deployment metadata:name: oldboyedu-linux-deploy spec: # 指定创建Pod的副本数量,默认值为1.replicas: 5 # 定义标签选择器,rs资源基于标签选择器关联对应的Pod哟~selector: matchLabels: apps: oldboyedu-web # 定义升级策略strategy: # 升级的类型,"Recreate" or "RollingUpdate" # Recreate: # 先停止所有的Pod运行,然后在批量创建更新。 # 生产环节中不推荐使用这种策略,因为升级过程中用户将无法访问服务! # RollingUpdate: # 滚动更新,即先实现部分更新,逐步替换原有的pod,是默认策略。 type: RollingUpdate # 自定义滚动更新的策略 rollingUpdate: # 在原有Pod的副本基础上,多启动Pod的数量。 maxSurge: 2 # 在升级过程中最大不可访问的Pod数量. maxUnavailable: 1 # 定义Pod资源创建的模板template: metadata: name: linux-pod labels: apps: oldboyedu-web spec: containers: - name: linux-web image: nginx:1.20.1

| 项目案例:部署wordpress
将服务放到一个容器里
# 编写资源清单cat > 01-deploy-wordpresss.yaml <'EOF'apiVersion: extensions/v1beta1 kind: Deployment metadata:name: wordpress spec:replicas: 2selector: matchLabels: app: wordpress template: metadata: labels: app: wordpress spec: containers: - name: mysql image: 10.0.0.101:5000/mysql:5.7 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: somewordpress - name: MYSQL_DATABASE value: wordpress - name: MYSQL_USER value: wordpress - name: MYSQL_PASSWORD value: wordpress - name: wordpress image: 10.0.0.101:5000:5000/wordpress:latest ports: - containerPort: 80 env: - name: WORDPRESS_DB_HOST value: 127.0.0.1 - name: WORDPRESS_DB_USER value: wordpress - name: WORDPRESS_DB_PASSWORD value: wordpress EOF# 暴露服务kubectl expose -f 01-deploy-wordpresss.yaml --type=NodePort
将Pod的容器进行拆分
# 拆分mysqlcat > deploy-mysql.yaml <<'EOF'apiVersion: extensions/v1beta1 kind: Deployment metadata:name: oldboyedu-mysql spec:replicas: 1selector: matchLabels: app: oldboyedu-mysql template: metadata: labels: app: oldboyedu-mysql spec: containers: - name: oldboyedu-mysql image: 10.0.0.101:5000/mysql:5.7 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: somewordpress - name: MYSQL_DATABASE value: wordpress - name: MYSQL_USER value: wordpress - name: MYSQL_PASSWORD value: wordpress EOF# 拆分wordpresscat > deploy-wordpresss.yaml <<'EOF'apiVersion: extensions/v1beta1 kind: Deployment metadata:name: oldboyedu-wordpress spec:replicas: 3selector: matchLabels: app: oldboyedu-wordpress template: metadata: labels: app: oldboyedu-wordpress spec: containers: - name: oldboyedu-wordpress image: 10.0.0.101:5000/wordpress:latest ports: - containerPort: 80 env: - name: WORDPRESS_DB_HOST # 写mysql的Pod的IP地址 value: 10.244.1.163 - name: WORDPRESS_DB_USER value: wordpress - name: WORDPRESS_DB_PASSWORD value: wordpress EOF# 暴露workpress服务kubectl expose deployment oldboyedu-wordpress --type=NodePort
解决svc的IP地址变化及数据持久化问题
# 部署mysql服务cat > 01-deploy-mysql.yaml <<'EOF'apiVersion: extensions/v1beta1 kind: Deployment metadata:name: oldboyedu-mysql spec:replicas: 1selector: matchLabels: app: oldboyedu-mysql template: metadata: labels: app: oldboyedu-mysql spec: volumes: - name: data nfs: server: 10.0.0.101 path: /oldboyedu/data/kubernetes containers: - name: oldboyedu-mysql image: 10.0.0.101:5000/mysql:5.7 volumeMounts: - name: data mountPath: /var/lib/mysql ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: somewordpress - name: MYSQL_DATABASE value: wordpress - name: MYSQL_USER value: wordpress - name: MYSQL_PASSWORD value: wordpress---apiVersion: v1 kind: Service metadata:name: oldboyedu-mysql spec:clusterIP: 10.254.131.222selector: app: oldboyedu-mysql ports: - port: 3306 targetPort: 3306EOF# 部署wordpress服务cat > 02-deploy-wordpresss.yaml <<'EOF'apiVersion: extensions/v1beta1 kind: Deployment metadata:name: oldboyedu-wordpress spec:replicas: 3selector: matchLabels: apps: oldboyedu-wordpress template: metadata: labels: apps: oldboyedu-wordpress spec: containers: - name: oldboyedu-wordpress image: k8s201.oldboyedu.com:5000/wordpress:latest ports: - containerPort: 80 env: - name: WORDPRESS_DB_HOST value: 10.254.131.222 - name: WORDPRESS_DB_USER value: wordpress - name: WORDPRESS_DB_PASSWORD value: wordpress---apiVersion: v1 kind: Service metadata:name: oldboyedu-wordpress spec:type: NodePort selector: apps: oldboyedu-wordpress ports: - port: 80 targetPort: 80 nodePort: 30088EOF# 创建服务kubectl apply -f .# 验证数据是否丢失kubectl delete pod --all# 回收资源kubectl delete -f .
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69952968/viewspace-3103352/ ,如需转载,请注明出处,否则将追究法律责任。