Kubernetes

从零开始部署Kubernetes v1.17.1集群(三)部署W

2020-01-31  本文已影响0人  浮云_9046

安装Kubernetes Worker节点

我们将安装1个Master 3个Worker节点的Kubernetes群集,本节内容包括安装三个Worker节点。

目录

环境

安装Centos 7

请从第一篇安装好的虚拟机基础上进行后续操作。

检查系统信息

查看操作系统的version、hostname、cpu信息,后面很多地方需要用到hostname,提前了解做到心中有数。如果名称不方便记忆可以自行修改。

# 查看操作系统版本。在 master 节点和 worker 节点都要执行
cat /etc/redhat-release
# 我的输出是:CentOS Linux release 7.7.1908 (Core)

# 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字
# 不能使用 localhost 作为节点的名字
hostname

# 请使用 lscpu 命令,核对 CPU 信息
# Architecture: x86_64    本安装文档不支持 arm 架构
# CPU(s):       2         CPU 内核数量不能低于 2
lscpu

修改hostname

需要在三个worker节点上分别设置名称。

# 修改 hostname, 把"k8s-worker1"改成你喜欢的名字
sudo hostnamectl set-hostname k8s-worker1
# 查看修改结果
hostnamectl status
# 设置 hostname 解析,这个命令需要root账户才能执行,sudo都不行。
echo "127.0.0.1   $(hostname)" >> /etc/hosts 

检查网络

$ 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 命令中,可以知道机器的默认网卡,通常是 eth0,如 default via 10.87.10.1 dev eth0

ip address 命令中,可显示默认网卡的 IP 地址,Kubernetes 将使用此 IP 地址与集群内的其他节点通信,如 10.87.10.138
所有节点上 Kubernetes 所使用的 IP 地址必须可以互通(无需 NAT 映射、无安全组或防火墙隔离)

安装Worker

安装Docker和kubelet

将以下内容保存为install.sh

#!/bin/bash

# 在 master 节点和 worker 节点都要执行

# 安装 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

# 设置 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

# 安装并启动 docker
yum install -y docker-ce-${1} docker-ce-cli-${1} containerd.io
systemctl enable docker
systemctl start docker

# 安装 nfs-utils
# 必须先安装 nfs-utils 才能挂载 nfs 网络存储
yum install -y nfs-utils
yum install -y wget

# 关闭 防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭 SeLinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 关闭 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
# 可能没有,追加
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
# 执行命令以应用
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 节点时可能会碰到如下错误
# [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

# 设置 docker 镜像,提高 docker 镜像下载速度和稳定性
# 如果您访问 https://hub.docker.io 速度非常稳定,亦可以跳过这个步骤
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

# 重启 docker,并启动 kubelet
systemctl daemon-reload
systemctl restart docker
systemctl enable kubelet && systemctl start kubelet

docker version

运行安装install.sh的脚本,后面的两个参数分别是docker和kubernetes的版本号,根据需要修改。

在这里查看Docker发布的版本号查看Kubernetes版本号

sudo sh ./install.sh 19.03.5 1.17.1

安装Worker节点的服务

初始化worker

如果有多个worker节点每个都要执行。

注意: 这段代码请su切换到root账户下执行。

# 只在 worker 节点执行
# 替换 192.168.1.20 为 master 节点的内网 IP
export MASTER_IP=192.168.1.20
# 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME
export APISERVER_NAME=apiserver.k8s.com
echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts

master节点上执行获得 join命令参数

# 在 master 节点执行
kubeadm token create --print-join-command

# 输出
kubeadm join apiserver.k8s.com --token mpfjma.4vjjg8flqihor4vt     --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303

有效时间

该 token 的有效时间为 2 个小时,2小时内,您可以使用此 token 初始化任意数量的 worker 节点。

kubeadm token create输出的结果复制到其它worker节点上执行。

# 在 worker 节点上 执行上一步命令的输出
kubeadm join apiserver.k8s.com --token mpfjma.4vjjg8flqihor4vt     --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303

检查初始化结果

master节点查看所有节点状态,大约1分钟左右就能看到所有节点已经Ready

# 只在 master 节点执行
kubectl get nodes -o wide

# 输出结果如下所示:
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

参考

上一篇下一篇

猜你喜欢

热点阅读