k8s集群手动添加node节点

本文详细介绍了手动在多个节点上安装和配置Kubernetes集群的过程,包括添加node节点、配置网络服务、部署flanneld、安装docker服务、设置kube-proxy和kubelet等关键步骤。

手动添加node节点

  1. 添加网络服务
# 从node节点拷贝相关证书
scp -r /etc/kubernetes 10.32.254.18:/etc/
# 解压
tar -xf flannel-v0.9.1-linux-amd64.tar.gz
cp {flanneld,mk-docker-opts.sh} /usr/local/bin/
cp flanneld.service /etc/systemd/system/
cat flanneld.service
[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
After=network-online.target
Wants=network-online.target
Before=docker.service

[Service]
Type=notify
ExecStart=/usr/local/bin/flanneld   -etcd-cafile=/etc/kubernetes/ssl/ca.pem   -etcd-certfile=/etc/kubernetes/ssl/kubernetes.pem   -etcd-keyfile=/etc/kubernetes/ssl/kubernetes-key.pem   -etcd-endpoints=https://10.32.254.19:2379,https://10.32.254.20:2379,https://10.32.254.21:2379   -etcd-prefix=/kubernetes/network
ExecStartPost=/usr/local/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
Restart=on-failure

[Install]
WantedBy=multi-user.target
RequiredBy=docker.service
# 启动flanneld
systemctl start flanneld && systemctl enable flanneld
  1. 添加docker服务
wget https://download.docker.com/linux/static/stable/x86_64/docker-17.12.0-ce.tgz
tar -xvf docker-17.12.0-ce.tgz
cp docker/docker* /usr/local/bin
cat > /etc/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.io

[Service]
Environment="PATH=/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin"
EnvironmentFile=-/run/flannel/subnet.env
EnvironmentFile=-/run/flannel/docker
ExecStart=/usr/local/bin/dockerd \
  --exec-opt native.cgroupdriver=cgroupfs \
  --log-level=error \
  --log-driver=json-file 
ExecReload=/bin/kill -s HUP $MAINPID
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
Restart=on-failure
RestartSec=5
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF
# 启动
systemctl daemon-reload
systemctl enable docker && systemctl start docker
  1. 添加kube-proxy和kubelet
# copy 2进制
scp /usr/local/bin/kubelet 10.32.254.18:/usr/local/bin/
scp /usr/local/bin/kube-proxy 10.32.254.18:/usr/local/bin/
# 依赖
conntrack-tools-1.4.4-4.el7.x86_64
mkdir -p /var/lib/kube-proxy
cat > /etc/systemd/system/kube-proxy.service << EOF
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target

[Service]
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/usr/local/bin/kube-proxy   --bind-address=10.32.254.18   --hostname-override=10.32.254.18   --cluster-cidr=10.254.0.0/16   --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig   --logtostderr=true   --v=2
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

# 启动
systemctl daemon-reload
systemctl enable kube-proxy
systemctl start kube-proxy
systemctl status kube-proxy
# kubelet
mkdir -p /var/lib/kubelet
cat > /etc/systemd/system/kubelet.service << EOF
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service

[Service]
WorkingDirectory=/var/lib/kubelet
ExecStart=/usr/local/bin/kubelet   --address=10.32.254.18   --hostname-override=10.32.254.18   --pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest   --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig   --kubeconfig=/etc/kubernetes/kubelet.kubeconfig    --cert-dir=/etc/kubernetes/ssl   --container-runtime=docker   --cluster-dns=10.254.0.2   --cluster-domain=cluster.local   --hairpin-mode promiscuous-bridge   --allow-privileged=true   --serialize-image-pulls=false   --register-node=true   --logtostderr=true   --cgroup-driver=cgroupfs    --v=2

Restart=on-failure
KillMode=process
LimitNOFILE=65536
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
# 启动
systemctl daemon-reload
systemctl enable kubelet && systemctl start kubelet
# master节点查看验证
kubectl get nodes
NAME           STATUS    ROLES     AGE       VERSION
10.32.254.18   Ready     <none>    1m        v1.10.13
10.32.254.19   Ready     <none>    254d      v1.10.13
10.32.254.20   Ready     <none>    254d      v1.10.13
10.32.254.21   Ready     <none>    254d      v1.10.13
<think> 首先,用户的问题是关于Kubernetes高可用集群扩容Node节点的操作方法。用户明确表示要查找K8s高可用集群扩容node节点的方法。 从系统指令和用户消息中,我需要参考站内引用,这些引用提供了相关信息: - 引用[1]:描述了K8s集群的结构,包括master节点node节点。它提到node节点是工作节点,运行kubelet、kube-proxy等组件。 - 引用[2]:讨论在搭建集群时如何选择节点大小,但用户的问题是扩容node节点,不是选择大小。 - 引用[3]:具体描述了k8s二进制node节点扩容的方法。它提供了从现有节点复制配置到新节点的步骤。 - 引用[4]:展示了如何验证集群状态,包括查看节点状态。 系统指令要求: - 使用中文回答。 - 结构清晰,帮助用户逐步解决问题。 - 回答真实可靠。 - 在行内数学表达式使用$...$格式,但用户问题中没有数学内容,所以可能不需要。 - 独立公式使用$$...$$格式,但这里可能不适用。 - LaTeX语法正确。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答末尾添加相关问题部分。 用户消息的最后部分是:“我想查找K8s高可用集群扩容node节点的方法 请问K8s高可用集群扩容node节点的操作方法”,所以我需要专注于扩容node节点的操作步骤。 关键参考是引用[3],因为它直接提供了二进制扩容node节点的方法。引用[3]说:为了简单,我们先去从node1上复制配置好的k8s组件(包含证书,配置,启动文件)到node3上 [root@k8s-node1 ~]# scp -r /opt/kubernetes root@k8s-node3:/opt/ [root@k8s-node1 system]# scp kube-proxy.service kubelet.service root@k8s-node3:/usr/lib/systemd/system [^3]。 这表明了扩容node节点的步骤涉及复制配置文件和组件到新节点。 除了引用,我还应该基于一般Kubernetes知识来补充,确保回答全面。例如,扩容node节点的一般步骤包括: 1. 准备新节点:安装操作系统、Docker或其他容器运行时、kubelet、kube-proxy等。 2. 配置新节点:复制必要的证书、配置文件。 3. 加入集群:使用kubeadm join(如果是kubeadm安装)或手动配置。 4. 验证节点状态。 用户提到是“高可用集群”,所以需要考虑HA方面,但扩容node节点通常不影响master节点的HA,因为node节点是工作节点。 回答结构: - 以清晰的步骤解释操作方法。 - 参考引用,在相关部分添加引用标识。 - 提供命令示例,如引用[3]中的scp命令。 - 最后验证节点加入。 - 然后生成相关问题。 生成相关问题:系统指令要求生成相关问题。在示例中,是关于快速排序的,所以我应该创建与主题相关的问题,比如: 1. 如何验证新节点是否成功加入集群? 2. 扩容node节点时需要注意哪些问题? 3. 在高可用集群中,扩容node节点对整体性能的影响是什么? 确保回答真实可靠:基于引用和标准Kubernetes实践。 完整回答大纲: 1. 介绍扩容node节点的基本概念。 2. 逐步操作步骤: a. 准备新节点。 b. 复制配置和组件(参考引用[3])。 c. 配置和启动服务。 d. 加入集群。 e. 验证节点状态(参考引用[4])。 3. 添加引用标识。 4. 结束语。 5. 相关问题部分。 </think> ### Kubernetes高可用集群扩容Node节点的操作方法 在Kubernetes高可用集群中,扩容Node节点(工作节点)是提升集群计算能力的关键操作。Node节点负责运行用户应用,扩容过程涉及准备新节点、复制配置、加入集群和验证状态。以下基于站内引用和标准实践,提供详细的操作步骤,确保真实可靠。操作前,确保集群已配置高可用(如多Master节点),且新节点已安装操作系统、容器运行时(如Docker)和必要依赖。 #### 操作步骤 1. **准备新节点** 在新节点上安装基础组件: - 安装容器运行时(如Docker)和kubelet、kube-proxy。 - 确保网络配置与集群一致(如使用Calico或Flannel网络插件)。 例如,在Ubuntu系统上: ```bash sudo apt update sudo apt install -y docker.io kubelet kubeadm kubectl # 安装依赖 ``` 2. **复制配置文件和组件** 从现有Node节点复制Kubernetes组件、证书和配置文件到新节点。参考引用[3],使用`scp`命令简化操作: - 复制Kubernetes组件目录(包含证书和配置): ```bash # 从现有节点(如node1)复制到新节点(如node3) scp -r /opt/kubernetes root@k8s-node3:/opt/ # 复制核心组件[^3] ``` - 复制服务启动文件(如systemd服务): ```bash scp /usr/lib/systemd/system/kubelet.service root@k8s-node3:/usr/lib/systemd/system/ scp /usr/lib/systemd/system/kube-proxy.service root@k8s-node3:/usr/lib/systemd/system/[^3] ``` 3. **配置并启动服务** 在新节点上配置服务: - 修改配置文件(如`/etc/kubernetes/kubelet.conf`),确保指向集群的API Server地址(通常是Master节点的负载均衡IP)。 - 启动kubelet和kube-proxy服务: ```bash systemctl daemon-reload systemctl enable kubelet kube-proxy systemctl start kubelet kube-proxy ``` 4. **加入集群** 使用`kubeadm join`命令或手动方式将新节点添加集群: - 如果集群使用kubeadm部署,运行以下命令(需从Master节点获取join token): ```bash kubeadm join <MASTER_IP>:6443 --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH> ``` - 对于二进制部署(如引用中方法),确保新节点配置正确后,服务启动后会自动注册。 5. **验证节点状态** 在Master节点上检查新节点是否成功加入: ```bash kubectl get nodes # 查看所有节点状态,新节点应显示"Ready"[^4] kubectl get pods -o wide -n kube-system # 检查系统Pod是否在新节点上运行[^4] ``` 如果状态为"NotReady",检查网络连接或日志(如`journalctl -u kubelet`)。 #### 注意事项 - **高可用性**:Node节点扩容不影响Master节点的HA,但需确保新节点网络与集群互通,避免分区问题[^1]。 - **性能优化**:参考引用[2],选择节点大小时需平衡资源利用率;建议新节点配置与现有节点一致(如CPU、内存)[^2]。 - **安全**:复制证书时确保权限正确(如600权限),避免安全风险。 - 整个操作通常在几分钟内完成,不影响现有服务。 通过以上步骤,您可以高效扩容Node节点,提升集群的横向扩展能力。扩容后,集群会自动调度Pod到新节点
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值