美文网首页Kubernetes
从零开始部署Kubernetes v1.17.1集群(三)部署W

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

作者: 浮云_9046 | 来源:发表于2020-01-31 21:46 被阅读0次

    安装Kubernetes Worker节点

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

    目录

    环境

    • 操作系统:Centos7
    • master:192.168.1.20
    • worker1:192.168.1.21
    • worker2:192.168.1.22
    • worker3:192.168.1.23

    安装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节点上分别设置名称。

    • k8s-worker1
    • k8s-worker2
    • k8s-worker3
    # 修改 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
    

    参考

    相关文章

      网友评论

        本文标题:从零开始部署Kubernetes v1.17.1集群(三)部署W

        本文链接:https://www.haomeiwen.com/subject/ivjnthtx.html