• 云原生之容器化:3、Kubeadm部署Kubernetes


    kubeadm是一个提供了kubeadm init和kubeadm join最佳实践命令,且用于快速构建一个kubernetes集群的工具,你可以使用此工具快速构建一个kubernetes学习环境。

    通过本章节的学习,你将能够使用kubeadm工具,成功构建出一个基础的kubernetes集群的学习环境

    1、环境准备

    IP主机名角色操作系统
    192.168.0.11centos-1.shared masterMasterCentos 7.7
    192.168.0.12centos-2.shared node01NodeCentos 7.7
    192.168.0.13centos-3.shared node01NodeCentos 7.7

    2、Hosts文件准备

    #cat /etc/hosts
    192.168.0.11 centos-1.shared master
    192.168.0.12 centos-2.shared node01
    192.168.0.13 centos-3.shared node02
    
    • 1
    • 2
    • 3
    • 4

    3、Docker环境配置

    1、关闭系统默认防火墙和SELINUX

    setenforce 0
    sed -i -r "/^SELINUX=/c SELINUX=disabled" /etc/selinux/config
    which systemctl && systemctl stop firewalld
    which systemctl && systemctl disable firewalld
    which systemctl && systemctl stop iptables || service iptables stop
    which systemctl && systemctl disable iptables || chkconfig iptables off
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2、卸载旧版本Docker

    yum remove docker \
    	docker-client \
    	docker-client-latest \
    	docker-common \
    	docker-latest \
    	docker-latest-logrotate \
    	docker-logrotate \
    	docker-selinux \
    	docker-engine-selinux \
    	docker-engine \
    	docker \
    	docker-ce \
    	docker-ee
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3、安装DockerCE环境

    1、安装所需的包

    • yum-utils 提供了 yum-config-manager 实用程序,并且 devicemapper 存储驱动需要 device-mapper-persistent-data 和 lvm2**
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    • 1

    2、更新xfsprogs

    yum update xfsprogs    
    
    • 1

    3、使用以下命令设置源

    #官方源

    yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo   
    
    • 1
    • 2
    • 3

    #阿里源(建议使用)

    yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
    
    • 1
    • 2
    • 3

    4、安装最新版本的Docker CE

    yum install -y docker-ce  
    
    • 1

    #或者安装指定版本

    yum list docker-ce --showduplicates | sort -r
    yum install -y docker-ce-17.12.1.ce-1.el7.centos
    
    • 1
    • 2

    4、启动Docker并设置开机运行

    systemctl start docker
    systemctl enable docker
    systemctl status docker
    
    • 1
    • 2
    • 3

    5、常见问题

    WARINING提示:

    WARNING: bridge-nf-call-iptables is disabled
    WARNING: bridge-nf-call-ip6tables is disabled
    
    • 1
    • 2

    #解决方案

    cat <<EOF >  /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF 
    sysctl -p
    sysctl --system
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4、其他准备工作

    1、关闭防火墙

    systemctl stop firewalld.service
    systemctl stop iptables.service
    systemctl disable firewalld.service
    systemctl disable iptables.service
    
    • 1
    • 2
    • 3
    • 4

    2、禁用SELINUX

    #临时关闭:

    setenforce 0     
    
    • 1

    #永久关闭:

    vim /etc/selinux/config
    SELINUX=disabled
    
    • 1
    • 2

    3、禁用swap设备(影响性能,k8s集群初始化会报错)

    #临时禁用

    swapoff  -a
    
    • 1

    #永久禁用

    Vim  /etc/fstab 
    注释 /dev/mapper/VolGroup-lv_swap swap 所在的行
    
    • 1
    • 2

    4、启用ipvs内核模块 创建内核模块载入相关的脚本文件/etc/sysconfig/modules/ipvs.modules,设定自动载入的内核模块。文件内容如下(用到再配置也可以)

    #!/bin/bash
    ipvs_mods_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"
    for i in $(ls $ipvs_mods_dir | grep -o "^[^.]*"); do
        /sbin/modinfo -F filename $i  &> /dev/null
    	if [ $? -eq 0 ]; then
    	    /sbin/modprobe $i
    	fi
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5、赋权、运行并检查

    chmod +x /etc/sysconfig/modules/ipvs.modules
    /etc/sysconfig/modules/ipvs.modules
    lsmod |grep ip_vs	
    
    • 1
    • 2
    • 3

    6、docker文件配置(docker unit file: /usr/lib/systemd/system/docker.service)

    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
    ExecReload=/bin/kill -s HUP $MAINPID
    TimeoutSe=0
    RestartSec=2
    Restart=always
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    #重启docker

    systemctl daemon-reload
    systemctl restart docker   
    
    • 1
    • 2

    #变量查看,确认是否载入成功

    docker info
    
    • 1

    5、使用Kubeadm部署k8s集群

    1、首先安装k8s相关软件包。

    你也可以在阿里云镜像仓库获取相关帮助。

    配置如下所示:

    cd /etc/yum.repos.d/
    vi k8s.repo
    	
    [kubernetes]
    name=Kubernetes Repository
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    	   https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2、yum仓库载入情况检查

    #yum repolist
    			
    [root@centos-1 yum.repos.d]# yum list all |grep "^kube"
    kubeadm.x86_64                              1.16.3-0                   kubernetes
    kubectl.x86_64                              1.16.3-0                   kubernetes
    kubelet.x86_64                              1.16.3-0                   kubernetes
    kubernetes.x86_64                           1.5.2-0.7.git269f928.el7   extras   
    kubernetes-client.x86_64                    1.5.2-0.7.git269f928.el7   extras   
    kubernetes-cni.x86_64                       0.7.5-0                    kubernetes
    kubernetes-master.x86_64                    1.5.2-0.7.git269f928.el7   extras   
    kubernetes-node.x86_64                      1.5.2-0.7.git269f928.el7   extras 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3、使用yum安装kubeadm 、kubectl和kubelet

    yum install kubeadm  kubectl kubelet
    
    • 1

    可以使用以下命令安装指定(v1.16)版本:

    #查看相关版本,然后来选择

    yum list kubelet --showduplicates | sort -r
    yum list kubeadm --showduplicates | sort -r
    yum list kubectl --showduplicates | sort -r
    
    • 1
    • 2
    • 3

    #安装,默认最新版

    yum install -y kubelet kubeadm kubectl
    
    • 1

    #安装指定版本

    yum install -y kubeadm-1.16.3-0 kubelet-1.16.3-0 kubectl-1.16.3-0
    
    • 1

    4、检查相关软件包是否完整

    [root@centos-1 yum.repos.d]# rpm -ql kubelet
    /etc/kubernetes/manifests
    /etc/sysconfig/kubelet
    /usr/bin/kubelet
    /usr/lib/systemd/system/kubelet.service
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5、配置kubelet。swap处于启用状态时,不会报错(如果上面配置了关闭swap,可省略)

    vim /etc/sysconfig/kubelet
    KUBELET_EXTRA_ARG="--fail-swap-on=false”
    
    • 1
    • 2

    6、初始化集群(Master节点)

    #首先将集群初始化配置文件导出

    kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
    
    • 1

    #将imageRepository换成阿里云镜像,然后保存

    imageRepository: registry.aliyuncs.com/google_containers
    
    • 1

    查看所需镜像列表

    kubeadm config images list --config kubeadm.yml
    
    • 1

    拉取镜像,等拉取完毕再执行后续操作

    kubeadm config images pull --config kubeadm.yml
    
    • 1

    #方式一:命令行(–dry-run:试运行,不会有改动)

    kubeadm init --kubernetes-version=v1.16.0 --pod-network-cidr="10.244.0.0/16"  --dry-run
    
    • 1

    #方式二:Yml配置文件,使用—config string

    #集群初始化完毕后,创建用户(最好用普通账号创建):

    mkdir -p $HOME/.kube
    
    • 1

    #切换至Root用户操作:

    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config(主配置文件,至关重要,不能泄露)
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    • 1
    • 2

    #集成flannel网络插件,并观察

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    • 1

    #Pod情况查看:

    kubectl get pods -n kube-system
    
    • 1

    #集群初始化完毕

    kubectl get nodes
    
    • 1

    7、Node节点

    从主节点复制repo配置到对应node节点上:

    scp k8s.repo node01:/etc/yum.repos.d/
    scp /etc/sysconfig/kubelet  node01:/etc/sysconfig
    scp k8s.repo node02:/etc/yum.repos.d/
    scp /etc/sysconfig/kubelet  node02:/etc/sysconfig
    scp  /run/flannel/subnet.env node01: /run/flannel/subnet.env
    scp  /run/flannel/subnet.env node02: /run/flannel/subnet.env
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    8、在主节点打包node所需镜像,并scp到各node节点

    docker save -o k8s-node.tar k8s.gcr.io/coredns quay.io/coreos/flannel k8s.gcr.io/pause
    scp k8s-node.tar node01:/
    scp k8s-node.tar node02:/
    
    • 1
    • 2
    • 3

    9、Node节点:

    加载镜像( coredns、 flannel、 pause):

    cd / && docker load —input k8s-node.tar
    yum install kubelet kubeadm    
    
    • 1
    • 2

    添加集群。注意这个token是第六步初始化集群给你的,用于node节点加入节点时候用的。

    kubeadm join 192.168.0.11:6443 --token z9kmma.p8ak2ffytr7okdsv \
    --discovery-token-ca-cert-hash \
    sha256:82ee3a673e99fa8f46a8f515fa430819b5957f32f3fcc21d9c3114f3394b4b0d 
    
    • 1
    • 2
    • 3

    10、部署完毕,并检查集群状态(Master节点上)

    此时一个基础的kubernetes集群已经构建完成了。

    kubectl get nodes
    NAME              STATUS   ROLES    AGE   VERSION    
    centos-1.shared   Ready    master   41m   v1.16.3
    centos-2.shared   Ready    <none>   19m   v1.16.3
    centos-3.shared   Ready    <none>   18m   v1.16.3
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    这C语言代码,会让你发疯
    REASONING ON GRAPHS: FAITHFUL AND INTERPRETABLE LARGE LANGUAGE MODEL REASONING
    软件性能测试指标分享,第三方检测机构进行性能测试的好处
    使用Go语言开发一个短链接服务:一、基本原理
    第二课第一周大作业--构建和评估一个线性风险模型
    hevc 继续色度半像素差值
    Oracle分区的使用详解:创建、修改和删除分区,处理分区已满或不存在的插入数据,以及分区历史数据与近期数据的操作指南
    Element-UI+Vue实现开发权限
    POSIX线程与Win32线程
    R 语言中的 pnorm 方法与 Python scipy 的 norm.cdf、norm.sf 等价
  • 原文地址:https://blog.csdn.net/flq18210105507/article/details/126298379