YAZONG 我的开源

Kubernetes(四)kubespray方式(4.6)基于kubespray的集群运维(暂未测试)

  , , ,
0 评论0 浏览

下述内容是公司可能经常会遇见的情况。此文档会不断去完善。

比如:如果加一个worker节点、ETCD节点,下线一个master,再替换一个master,各种各样的日常遇到的问题和使用方式,如何办?

Master节点

#1、增加master节点

# 1.编辑hosts.yaml,增加master节点配置
$ vi inventory/mycluster/hosts.yaml
# 2.执行cluster.yml(不要用scale.yml)		此命令跟部署集群时是一模一样的。因为涉及到master节点的变动,现有的master节点也需要有配置调整。
$ ansible-playbook -i inventory/mycluster/hosts.yaml cluster.yml -b -v
# 3.重启nginx-proxy - 在所有节点执行下面命令重启nginx-proxy					这个要在每个节点都操作。这里用的是docker,用containerd的话,要把docker替换成ctl???。
																			为什么要重启,因为nginx的配置会变化,nginx配置的文件里写了所有apiserver的地址
																			如果增加master,那么apiserver地址就会变化。那么nginx重启就会重新记载配置文件。
$ docker ps | grep k8s_nginx-proxy_nginx-proxy | awk '{print $1}' | xargs docker restart

#2、删除master节点(比增加节点稍微麻烦一些)

#如果你要删除的是配置文件中第一个节点,需要先调整配置,将第一行(node-1)配置下移,再重新运行cluster.yml,使其变成非第一行配置。举例如下:

# 场景1:下线node-1节点
$ vi inventory/mycluster/hosts.yaml
# 变更前的配置
  children:
    kube-master:
      hosts:
        node-1:
        node-2:
        node-3:
# 变更后的配置
  children:
    kube-master:
      hosts:
		#如果要删除node-1节点,首先要调整node-1和node-2的位置
        node-2:
        node-1:
        node-3:
# 再执行一次cluster.yml
$ ansible-playbook -i inventory/mycluster/hosts.yaml -b cluster.yml

# 场景2:非第一行的master节点下线流程:			那么上述的调整就映射成了此时的非第一行的流程。

# 执行remove-node.yml
(不要在hosts.yaml中编辑删除要下线的节点,
因为要保证hosts.yaml不变,然后执行remove-node.yml,传一个环境变量node=NODE-NAME你的要下线的节点的名字。
上述命令执行成功之后,为了保证一致性,要把hosts.yaml也编辑一下,同步下线的节点。)
$ ansible-playbook -i inventory/mycluster/hosts.yaml remove-node.yml -b -v -e "node=NODE-NAME"
# 同步hosts.yaml(编辑hosts.yaml将下线的节点删除,保持集群状态和配置文件的一致性)
$ vi inventory/mycluster/hosts.yaml

Worker节点

#1、增加worker节点

# 刷新缓存
$ ansible-playbook -i inventory/mycluster/hosts.yaml facts.yml -b -v
# 修改配置hosts.yaml,增加节点						这个编辑之后,才能执行下述的scale.yml。
$ vi inventory/mycluster/hosts.yaml
# 执行scale添加节点,--limit限制只在某个固定节点执行	
--一定要要加上--limit=NODE-NAME,指定添加worker节点的名字。限定ansible-playbook只在哪一个节点NODE-NAME上执行,而不会影响现有的节点,当然,现有的节点也不会做任何操作的。
$ ansible-playbook -i inventory/mycluster/hosts.yaml scale.yml --limit=NODE-NAME -b -v

#2、删除worker节点
#跟删除master节点是类似的。只需要执行remove-node.yml,环境变量把要移除的节点传进去。
# 此命令可以下线节点,不影响其他正在运行中的节点,并清理节点上所有的容器以及kubelet,恢复初始状态,多个节点逗号分隔
$ ansible-playbook -i inventory/mycluster/hosts.yaml remove-node.yml -b -v -e "node=NODE-NAME-1,NODE-NAME-2,..."
# 手工同步hosts.yaml(编辑hosts.yaml将下线的节点删除即可,保持集群状态和配置文件的一致性)
$ vi inventory/mycluster/hosts.yaml

ETCD节点

#如果要变更的etcd节点同时也是master或worker节点,需要先将master/worker节点按照前面的文档操作下线,保留纯粹的etcd节点
--要求在生产环境部署时,最好保证ETCD节点和集群节点分开部署。那么日常运维也更加方便。

#1、增加etcd节点

# 编辑hosts.yaml(可以增加1个或2个etcd节点配置)		在ETCD节点那段增加ETCD节点配置。
$ vi inventory/mycluster/hosts.yaml
# 更新etcd集群
$ ansible-playbook -i inventory/mycluster/hosts.yaml upgrade-cluster.yml --limit=etcd,kube-master -e ignore_assert_errors=yes -e etcd_retries=10

#2、删除etcd节点

# 执行remove-node.yml(不要在hosts.yaml中删除要下线的节点)
$ ansible-playbook -i inventory/mycluster/hosts.yaml remove-node.yml -b -v -e "node=NODE-NAME"
# 把node下线之后,手工同步hosts.yaml(编辑hosts.yaml将下线的节点删除,保持集群状态和配置文件的一致性)
$ vi inventory/mycluster/hosts.yaml
# 运行cluster.yml给node节点重新生成etcd节点相关的配置(把用到etcd的主键同步更新掉)
$ ansible-playbook -i inventory/mycluster/hosts.yaml -b cluster.yml

其他常用命令

#1、集群reset

# 运行reset.yml一键清理集群
$ ansible-playbook -i inventory/mycluster/hosts.yaml -b -v reset.yml

#2、自定义play起始点

#当我们执行play的过程中如果有问题,需要重新执行的时候,如果重新执行指令会重新经历前面漫长的等待,这个时候“跳过”功能就显得非常有用
#当运行集群,出现问题时,不从头不来,而从出错的前一步或前几步继续运行的话,那么可以指定--start-at-task,会跳过前面的任务。
# 通过--start-at-task指定从哪个task处开始执行,会跳过前面的任务,举例如下
$ ansible-playbook --start-at-task="reset | gather mounted kubelet dirs"

#3、忽略错误

#当有些错误是我们确认可以接受的或误报的,可以配置ignore_errors: true,避免task出现错误后影响整个流程的执行。
#当运行集群,出现的错误,确认是不影响集群的,或者说环境比较特殊,可配置ignore_errors: true自动跳过。
# 示例片段如下:
- name: "Remove physical volume from cluster disks."
  environment:
    PATH: "{{ ansible_env.PATH }}:/sbin"
  become: true
  command: "pvremove {{ disk_volume_device_1 }} --yes"
  ignore_errors: true

标题:Kubernetes(四)kubespray方式(4.6)基于kubespray的集群运维(暂未测试)
作者:yazong
地址:https://blog.llyweb.com/articles/2022/11/02/1667322281711.html