從零開(kāi)始部署Kubernetes v1.17.1集群(三)部署Worker節(jié)點(diǎn)

安裝Kubernetes Worker節(jié)點(diǎn)

我們將安裝1個(gè)Master 3個(gè)Worker節(jié)點(diǎn)的Kubernetes群集,本節(jié)內(nèi)容包括安裝三個(gè)Worker節(jié)點(diǎn)。

目錄

環(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

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容