安裝Kubernetes Worker節(jié)點(diǎn)
我們將安裝1個(gè)Master 3個(gè)Worker節(jié)點(diǎn)的Kubernetes群集,本節(jié)內(nèi)容包括安裝三個(gè)Worker節(jié)點(diǎn)。
目錄
- 從零開(kāi)始部署Kubernetes v1.17.1集群(一) 安裝Centos 7
- 從零開(kāi)始部署Kubernetes v1.17.1集群(二) 部署Master節(jié)點(diǎn)
- 從零開(kāi)始部署Kubernetes v1.17.1集群(三) 部署Worker節(jié)點(diǎn)
- 從零開(kāi)始部署Kubernetes v1.17.1集群(四) 部署可視化管理工具
環(huán)境
- 操作系統(tǒng):Centos7
- master:192.168.1.20
- worker1:192.168.1.21
- worker2:192.168.1.22
- worker3:192.168.1.23
安裝Centos 7
請(qǐng)從第一篇安裝好的虛擬機(jī)基礎(chǔ)上進(jìn)行后續(xù)操作。
檢查系統(tǒng)信息
查看操作系統(tǒng)的version、hostname、cpu信息,后面很多地方需要用到hostname,提前了解做到心中有數(shù)。如果名稱(chēng)不方便記憶可以自行修改。
# 查看操作系統(tǒng)版本。在 master 節(jié)點(diǎn)和 worker 節(jié)點(diǎn)都要執(zhí)行
cat /etc/redhat-release
# 我的輸出是:CentOS Linux release 7.7.1908 (Core)
# 此處 hostname 的輸出將會(huì)是該機(jī)器在 Kubernetes 集群中的節(jié)點(diǎn)名字
# 不能使用 localhost 作為節(jié)點(diǎn)的名字
hostname
# 請(qǐng)使用 lscpu 命令,核對(duì) CPU 信息
# Architecture: x86_64 本安裝文檔不支持 arm 架構(gòu)
# CPU(s): 2 CPU 內(nèi)核數(shù)量不能低于 2
lscpu
修改hostname
需要在三個(gè)worker節(jié)點(diǎn)上分別設(shè)置名稱(chēng)。
- k8s-worker1
- k8s-worker2
- k8s-worker3
# 修改 hostname, 把"k8s-worker1"改成你喜歡的名字
sudo hostnamectl set-hostname k8s-worker1
# 查看修改結(jié)果
hostnamectl status
# 設(shè)置 hostname 解析,這個(gè)命令需要root賬戶才能執(zhí)行,sudo都不行。
echo "127.0.0.1 $(hostname)" >> /etc/hosts
檢查網(wǎng)絡(luò)
$ ip route
default via 10.87.10.1 dev eth0 proto dhcp metric 100
10.87.10.0/24 dev eth0 proto kernel scope link src 10.87.10.138 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:00:c9:0b brd ff:ff:ff:ff:ff:ff
inet 10.87.10.138/24 brd 10.87.10.255 scope global
...
kubelet使用的IP地址
ip route show 命令中,可以知道機(jī)器的默認(rèn)網(wǎng)卡,通常是 eth0,如 default via 10.87.10.1 dev eth0
ip address 命令中,可顯示默認(rèn)網(wǎng)卡的 IP 地址,Kubernetes 將使用此 IP 地址與集群內(nèi)的其他節(jié)點(diǎn)通信,如 10.87.10.138
所有節(jié)點(diǎn)上 Kubernetes 所使用的 IP 地址必須可以互通(無(wú)需 NAT 映射、無(wú)安全組或防火墻隔離)
安裝Worker
安裝Docker和kubelet
將以下內(nèi)容保存為install.sh。
#!/bin/bash
# 在 master 節(jié)點(diǎn)和 worker 節(jié)點(diǎn)都要執(zhí)行
# 安裝 docker
# 參考文檔如下
# https://docs.docker.com/install/linux/docker-ce/centos/
# https://docs.docker.com/install/linux/linux-postinstall/
# 卸載舊版本
yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# 設(shè)置 yum repository
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安裝并啟動(dòng) docker
yum install -y docker-ce-${1} docker-ce-cli-${1} containerd.io
systemctl enable docker
systemctl start docker
# 安裝 nfs-utils
# 必須先安裝 nfs-utils 才能掛載 nfs 網(wǎng)絡(luò)存儲(chǔ)
yum install -y nfs-utils
yum install -y wget
# 關(guān)閉 防火墻
systemctl stop firewalld
systemctl disable firewalld
# 關(guān)閉 SeLinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 關(guān)閉 swap
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
# 修改 /etc/sysctl.conf
# 如果有配置,則修改
sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
# 可能沒(méi)有,追加
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
# 執(zhí)行命令以應(yīng)用
sysctl -p
# 配置K8S的yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 卸載舊版本
yum remove -y kubelet kubeadm kubectl
# 安裝kubelet、kubeadm、kubectl
yum install -y kubelet-${2} kubeadm-${2} kubectl-${2}
# 修改docker Cgroup Driver為systemd
# # 將/usr/lib/systemd/system/docker.service文件中的這一行 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
# # 修改為 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd
# 如果不修改,在添加 worker 節(jié)點(diǎn)時(shí)可能會(huì)碰到如下錯(cuò)誤
# [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd".
# Please follow the guide at https://kubernetes.io/docs/setup/cri/
sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service
# 設(shè)置 docker 鏡像,提高 docker 鏡像下載速度和穩(wěn)定性
# 如果您訪問(wèn) https://hub.docker.io 速度非常穩(wěn)定,亦可以跳過(guò)這個(gè)步驟
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# 重啟 docker,并啟動(dòng) kubelet
systemctl daemon-reload
systemctl restart docker
systemctl enable kubelet && systemctl start kubelet
docker version
運(yùn)行安裝install.sh的腳本,后面的兩個(gè)參數(shù)分別是docker和kubernetes的版本號(hào),根據(jù)需要修改。
在這里查看Docker發(fā)布的版本號(hào),查看Kubernetes版本號(hào)。
sudo sh ./install.sh 19.03.5 1.17.1
安裝Worker節(jié)點(diǎn)的服務(wù)
初始化worker
如果有多個(gè)worker節(jié)點(diǎn)每個(gè)都要執(zhí)行。
注意: 這段代碼請(qǐng)su切換到root賬戶下執(zhí)行。
# 只在 worker 節(jié)點(diǎn)執(zhí)行
# 替換 192.168.1.20 為 master 節(jié)點(diǎn)的內(nèi)網(wǎng) IP
export MASTER_IP=192.168.1.20
# 替換 apiserver.demo 為初始化 master 節(jié)點(diǎn)時(shí)所使用的 APISERVER_NAME
export APISERVER_NAME=apiserver.k8s.com
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
在master節(jié)點(diǎn)上執(zhí)行獲得 join命令參數(shù)
# 在 master 節(jié)點(diǎn)執(zhí)行
kubeadm token create --print-join-command
# 輸出
kubeadm join apiserver.k8s.com --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
有效時(shí)間
該 token 的有效時(shí)間為 2 個(gè)小時(shí),2小時(shí)內(nèi),您可以使用此 token 初始化任意數(shù)量的 worker 節(jié)點(diǎn)。
將kubeadm token create輸出的結(jié)果復(fù)制到其它worker節(jié)點(diǎn)上執(zhí)行。
# 在 worker 節(jié)點(diǎn)上 執(zhí)行上一步命令的輸出
kubeadm join apiserver.k8s.com --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
檢查初始化結(jié)果
在master節(jié)點(diǎn)查看所有節(jié)點(diǎn)狀態(tài),大約1分鐘左右就能看到所有節(jié)點(diǎn)已經(jīng)Ready。
# 只在 master 節(jié)點(diǎn)執(zhí)行
kubectl get nodes -o wide
# 輸出結(jié)果如下所示:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master Ready master 36h v1.17.1 192.168.1.20 <none> CentOS Linux 7 (Core) 3.10.0-1062.9.1.el7.x86_64 docker://18.9.7
k8s-worker1 Ready <none> 6m28s v1.17.1 192.168.1.21 <none> CentOS Linux 7 (Core) 3.10.0-1062.9.1.el7.x86_64 docker://19.3.5
k8s-worker2 Ready <none> 6m4s v1.17.1 192.168.1.22 <none> CentOS Linux 7 (Core) 3.10.0-1062.9.1.el7.x86_64 docker://19.3.5
k8s-worker3 Ready <none> 6m2s v1.17.1 192.168.1.23 <none> CentOS Linux 7 (Core) 3.10.0-1062.9.1.el7.x86_64 docker://19.3.5