在初始设置 Kubernetes 集群后,最常见的操作是通过添加更多运行工作负载(容器和 Pod)的节点来扩展集群。 扩展集群的方式取决于最初在集群引导期间使用的工具。 本指南演示如何使用 kubeadm 命令行工具将更多工作节点添加到 Kubernetes 集群。

示例集群

有一个包含两个工作节点和一个主节点的集群,容器运行时为containerd,使用的网络插件为calico,操作系统为Ubuntu 20.04

集群初始化配置--control-plane-endpointk8s-cluster.test.com

当前所有节点/etc/hosts新增的配置:

192.168.1.140   k8s-cluster.test.com
192.168.1.140 k8s-master-01  k8s-master-01.test.com
192.168.1.141 k8s-worker-01  k8s-worker-01.test.com
192.168.1.142 k8s-worker-02  k8s-worker-02.test.com
$ kubectl get nodes -o wide
NAME            STATUS   ROLES                  AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
k8s-master-01   Ready    control-plane,master   4h20m   v1.23.2   192.168.1.140   <none>        Ubuntu 20.04.3 LTS   5.4.0-96-generic   containerd://1.4.12
k8s-worker-01   Ready    <none>                 3h28m   v1.23.2   192.168.1.141   <none>        Ubuntu 20.04.3 LTS   5.4.0-96-generic   containerd://1.4.12
k8s-worker-02   Ready    <none>                 3h20m   v1.23.2   192.168.1.142   <none>        Ubuntu 20.04.3 LTS   5.4.0-96-generic   containerd://1.4.12

新增工作节点

节点信息

  • 操作系统:Ubuntu 20.04

  • CPU4vCPU

  • 内存:4GB

  • 主机名:k8s-worker-03

防火墙

# shell
sudo ufw allow 22/tcp
# Kubelet API
sudo ufw allow 10250/tcp
# NodePort Services
sudo ufw allow 30000:32767/tcp
# calico
sudo ufw allow 179/tcp
sudo ufw allow 5473/tcp
sudo ufw allow 4789/udp

/etc/hosts配置

注意:所有节点都需调整。

192.168.1.140   k8s-cluster.test.com
192.168.1.140 k8s-master-01  k8s-master-01.test.com
192.168.1.141 k8s-worker-01  k8s-worker-01.test.com
192.168.1.142 k8s-worker-02  k8s-worker-02.test.com
192.168.1.143 k8s-worker-03  k8s-worker-03.test.com

关闭swap分区

sudo sed -i 's/^\(.*swap.*\)$/#\1/g' /etc/fstab
sudo swapoff -a

安装Kubernetes

sudo apt update
sudo apt -y install curl apt-transport-https
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt update
sudo apt -y install vim git wget
sudo apt -y install kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

安装容器运行时containerd

# Configure persistent loading of modules
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF# Load at runtime
sudo modprobe overlay
sudo modprobe br_netfilter# Ensure sysctl params are set
sudo tee /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF# Reload configs
sudo sysctl --system# Install required packages
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates# Add Docker repo
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"# Install containerd
sudo apt update
sudo apt install -y containerd.io# Configure containerd and start service
sudo su -
mkdir -p /etc/containerd
containerd config default>/etc/containerd/config.toml
# Change image repository
sed -i 's/k8s.gcr.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml

要使用 systemd cgroup 驱动程序,需要在 /etc/containerd/config.toml 中设置:

...[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]...[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]SystemdCgroup = true

调整sandbox_image镜像地址:

sudo sed -i 's/k8s.gcr.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml[plugins."io.containerd.grpc.v1.cri"]...sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2"

重启服务:

# restart containerd
systemctl restart containerd
systemctl enable containerd
systemctl status  containerd

获取加入令牌

将新的工作节点加入 Kubernetes 集群时需要令牌。 当使用 kubeadm 初始集群时,会生成一个令牌,该令牌会在 24 小时后过期。
检查是否有令牌, 在控制节点上运行命令:

$ kubeadm token list
TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS
bdqsdw.2uf50yfvo3uwy93w   19h         2022-01-23T01:52:48Z   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token

如果令牌已过期,请使用以下命令生成一个新令牌:

sudo kubeadm token create

使用以下命令获取生成的令牌:

kubeadm token list

还可以生成令牌并加入打印命令:

kubeadm token create --print-join-command

获取令牌 CA 证书哈希

kubeadm join 命令通过将其哈希与提供的哈希匹配来验证根 CA 公钥。 通过运行以下命令获取主节点上的令牌 CA 证书哈希。

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

获取 api-server-endpoint 地址

在主节点中,使用 kubectl cluster-info 命令获取:

$ kubectl cluster-info
Kubernetes control plane is running at https://k8s-cluster.test.com:6443
CoreDNS is running at https://k8s-cluster.test.com:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

如输出所示,示例中为:https://k8s-cluster.test.com:6443

将工作节点加入集群

kubeadm join 命令用于将工作节点或其他主节点加入集群。 将工作节点加入集群的命令语法是:

kubeadm join [api-server-endpoint] [flags]

所需的常见标志是:

  • --token 字符串:要使用的令牌
  • --discovery-token-ca-cert-hash,格式为:<type>:<value>

完整的命令具有以下格式:

kubeadm join \<control-plane-host>:<control-plane-port> \--token <token> \--discovery-token-ca-cert-hash sha256:<hash>

示例:

$ kubeadm join k8s-cluster.test.com:6443 --token bdqsdw.2uf50yfvo3uwy93w \--discovery-token-ca-cert-hash sha256:2a6f431cc99860ff6e15519e08e62f01b9b0cb051380031582bd5cc22efbc084
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
W0122 03:39:25.496531   74229 utils.go:69] The recommended value for "resolvConf" in "KubeletConfiguration" is: /run/systemd/resolve/resolv.conf; the provided value is: /run/systemd/resolve/resolv.conf
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

等待节点处于“就绪”状态 – 检查控制节点,该过程可能需要几分钟时间,因为在配置和启动服务之前会拉取容器映像。

$ kubectl get nodes
NAME            STATUS   ROLES                  AGE     VERSION
k8s-master-01   Ready    control-plane,master   5h47m   v1.23.2
k8s-worker-01   Ready    <none>                 4h55m   v1.23.2
k8s-worker-02   Ready    <none>                 4h47m   v1.23.2
k8s-worker-03   Ready    <none>                 5m      v1.23.2

从集群中移除工作节点

要从集群中移除工作节点,请执行以下操作。

从节点迁移 pod

kubectl drain  <node-name> --delete-local-data --ignore-daemonsets

将节点标记为不可调度

防止节点调度新的 pod

kubectl cordon <node-name>

重置被移除节点

恢复通过“kubeadm join”对节点所做的更改。

kubeadm reset

一旦成功执行 kubeadm reset 命令,还可以重新将新节点加入集群。

新的工作节点加入k8s集群相关推荐

  1. 二进制安装多master节点的k8s集群

    二进制安装多master节点的k8s集群 k8s集群角色 IP 主机名 安装的组件 控制节点 192.168.1.180 master1 apiserver,controller-manager,sc ...

  2. 【K8S】基于单Master节点安装K8S集群

    写在前面 最近在研究K8S,今天就输出部分研究成果吧,后续也会持续更新. 集群规划 IP 主机名 节点 操作系统版本 192.168.175.101 binghe101 Master CentOS 8 ...

  3. Worker节点加入K8S集群报错:error execution phase preflight: couldn‘t validate the identity of the API Server

    问题描述 在使用kubeadm的join命令,想要将Worker节点加入到K8S集群,命令如下: kubeadm join cluster-endpoint:6443 --token x5g4uy.w ...

  4. 从零开始搭建K8S集群(二)-- 搭建K8S集群

    一.下面我们开始搭建K8S集群 配置K8S的yum源(自v1.6.0起,Kubernetes默认启用了CRI,Container Runtime Interface,详情请查看官网:https://k ...

  5. docker-ce-v18.09.0+kubernetes-v1.15.1(k8s)集群环境+dashboard-v1.10.1搭建完整教程

    一.k8s简介 什么是kubernetes 首先,他是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docke ...

  6. k8s1.18多master节点高可用集群安装-超详细中文官方文档

    kubernetes安装系列文章 kubernetes1.17.3安装-超详细的安装步骤 安装kubernetes1.17.3多master节点的高可用集群 k8s1.18单master节点高可用集群 ...

  7. K8S集群应用市场安装部署:第一篇

    这里是引用 操作系统要求 服务器配置信息 基础环境部署 3.1. NTP时钟源同步 3.2. 关闭firewalld服务 3.3. 关闭SElinux服务 3.4. 系统调优配置 3.5. 开启IP转 ...

  8. k8s集群安装之kubeadm

    Client Version:v1.20.1 Server Version:v1.20.1 1.卸载以前安装kubeadm的集群 卸载脚本: #!/bin/bash kubeadm reset -f ...

  9. 快速部署 k8s 集群

    部署3个节点的k8s 集群,三个虚机的信息如下所示: 主机名 ip地址 角色 系统os k8s-master 192.168.1.38 worker Ubuntu 18.04.2 LTS k8s-no ...

最新文章

  1. Linux中的简单文本处理
  2. 系统通知,居然用拉取
  3. 轻松解决Python “字符编码”,玩儿爬虫的朋友最爱这个库!
  4. Shell(1)——执行脚本
  5. BackTrack 5 发布了 ---直接下载地址
  6. 各种java生成word解决方案的优缺点对比
  7. 面向对象-多态,反射
  8. java基础—自定义一个比较器,按照字符串的长度升序的方法来比较字符串进行储存(java集合三)
  9. IDEA 修改项目名称
  10. 计算机信息机房,计算机信息中心机房建设标准
  11. Android 增量更新实例(Smart App Updates)
  12. 廖雪峰python学习笔记之Web开发
  13. 协议——UART(RS232)
  14. qlv转mp4出来没有画面,无画面,解决方法
  15. SQL调优指南笔记6:Explaining and Displaying Execution Plans
  16. VS2013使用教程总结(3)---修改VA的注释
  17. Flink中的CEP(一)
  18. 疫苗预约系统,疫苗预约管理系统,疫苗预约小程序系统设计与实现
  19. 1131 拯救大兵瑞恩(单源最短路径扩展-拆点(dp))
  20. 杰理之音量控制【篇】

热门文章

  1. 2.5 整理了3种小红书笔记爆文写作文案【玩赚小红书】
  2. 膝盖中了一箭之康复篇
  3. php mysql 模糊查询_PHP如何实现模糊查询(图文代码)
  4. 騰訊的“匿名”漂流瓶並不匿名zz
  5. SIM卡读卡器的研究与设计
  6. 高职教育人工智能专业调研报告
  7. EXCEL不够用,VBA和Python又太难?那么试试这个工具吧
  8. 小乌龟git如何同步远程分支_git同步远程仓库分支
  9. 定量分析---频率分布直方图(groupby,agg,round具体用法)
  10. 2017广东省红帽杯网络安全攻防大赛writeup