• 搭建一个完整的K8S集群基于CentOS 8系统


    创建三个centos节点:

    192.168.5.141 k8s-master
    192.168.5.142 k8s-nnode1
    192.168.5.143 k8s-nnode2

    查看centos系统版本

    # cat /etc/centos-release
    CentOS Linux release 8.2.2004 (Core) 
    备注:第1步~第8步,所有的节点都要操作,第9、10步Master节点操作,第11步Node节点操作。
    如果第9、10、11步操作失败,可以通过 kubeadm reset 命令来清理环境重新安装。

    1.关闭防火墙

    # systemctl stop firewalld

    2.关闭selinux

    # setenforce 0

    3.关闭swap

    # nano /etc/fstab ,注释掉swap挂载这一行可以永久关闭swap分区

    备注:k8s运行必须关闭掉swap分区

    # swapoff -a

    4.添加主机名与IP对应的关系

    # nano /etc/hosts 添加如下内容:
    
    
    192.168.5.141 k8s-master
    192.168.5.142 k8s-nnode1
    192.168.5.143 k8s-nnode2

    5.将桥接的IPV4流量传递到iptables 的链

    # cat > /etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    
    
    # sysctl --system

    6.安装docker

     

    卸载旧的docker:
    
    # sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    # sudo yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
    # sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    # sudo yum install -y docker-ce-3:19.03.15-3.el8 docker-ce-cli-1:19.03.15-3.el8 containerd.io-1.3.9-3.1.el8
    # docker --version
    Docker version 19.03.15, build 99e3ed8919
    修改Cgroupfs 为 Systemd(docker文件驱动默认由cgroupfs 改成 systemd,与k8s保持一致避免conflict):
    # cd /etc/
    # mkdir docker
    # cd docker # nano daemon.json
    或 # cd /etc/ && mkdir docker && cd docker && nano daemon.json
    #写入
    {
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    设置开机启动:
    
    # systemctl enable docker && systemctl start docker
    
    

      查看文件驱动:

    # docker info | grep Driver
    Storage Driver: overlay2
    Logging Driver: json-file
    Cgroup Driver: cgroupfs

     安装tc
    # yum install tc -y

    7.Kubernetes yum源配置:

    # nano /etc/yum.repos.d/kubernetes.repo,添加文件内容如下:
    [kubernetes]
    
    name=Kubernetes Repo
    
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-x86_64/
    
    gpgcheck=0
    
    enabled=1

    8.安装k8s

    yum -y install kubelet-1.18.5 kubeadm-1.18.5 kubectl-1.18.5 --disableexcludes=kubernetes
    设置k8s开机启动
    
    # systemctl enable kubelet
    
    启动k8s后台daemon
    
    # systemctl start kubelet

    9.部署Kubernetes Master

    从DockerHub的其它仓库拉取
    网上搜了半天,很多人说从别的仓库一个一个拉取再改名,但是这些教程仓库名称不一,有的教程已经很老了,仓库很多年没更新,这里直接授之以渔,自己学怎么找仓库。
    并且一个一个拉取改名太累了,可以写个脚本。

    过程如下:

    首先使用下面的命令获取需要的docker镜像名称:

    # kubeadm config images list

    k8s.gcr.io/kube-apiserver:v1.18.20
    k8s.gcr.io/kube-controller-manager:v1.18.20
    k8s.gcr.io/kube-scheduler:v1.18.20
    k8s.gcr.io/kube-proxy:v1.18.20
    k8s.gcr.io/pause:3.2
    k8s.gcr.io/etcd:3.4.3-0
    k8s.gcr.io/coredns:1.6.7

    注意:新版本的coredns改名了,变成了coredns/coredns,记得在images里面改一下

    首先要看看该在哪个地方拉取,可以去docker hub搜一搜哪里有kube-proxy之类的组件
    进入dockerhub搜索:
    https://hub.docker.com/search?q=kube-proxy&type=image
    按照最近更新排序,结果如下,可以发现一个下载次数10k+,更新也很频繁的仓库:

    然后开始编写脚本:

    # cd /etc/
    # mkdir k8s
    # cd k8s
    # nano pull_k8s_images.sh
    或 cd /etc/ && mkdir k8s && cd k8s && nano pull_k8s_images.sh
    set -o errexit
    set -o nounset
    set -o pipefail
    
    ##这里定义版本,按照上面得到的列表自己改一下版本号
    
    KUBE_VERSION=v1.18.5
    KUBE_PAUSE_VERSION=3.2
    ETCD_VERSION=3.4.3-0
    DNS_VERSION=1.6.7
    
    ##这是原始仓库名,最后需要改名成这个
    GCR_URL=k8s.gcr.io
    
    ##这里就是写你要使用的仓库
    DOCKERHUB_URL=gotok8s
    
    ##这里是镜像列表,新版本要把coredns改成coredns/coredns
    images=(
    kube-proxy:${KUBE_VERSION}
    kube-scheduler:${KUBE_VERSION}
    kube-controller-manager:${KUBE_VERSION}
    kube-apiserver:${KUBE_VERSION}
    pause:${KUBE_PAUSE_VERSION}
    etcd:${ETCD_VERSION}
    coredns:${DNS_VERSION}
    )
    
    ##这里是拉取和改名的循环语句
    for imageName in ${images[@]} ; do
      docker pull $DOCKERHUB_URL/$imageName
      docker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageName
      docker rmi $DOCKERHUB_URL/$imageName
    done

    然后授予执行权限

    # chmod +x ./pull_k8s_images.sh

    执行

    ./pull_k8s_images.sh
    执行初始化
    kubeadm init  \
     --kubernetes-version=1.18.5  \
     --apiserver-advertise-address=192.168.5.141   \
     --service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16

    执行命令之后可以拿到,记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群之前就执行。

      kubeadm join 192.168.5.141:6443 --token n1anmw.ubhpjr33jdncdg5b \
         --discovery-token-ca-cert-hash sha256:372c1db40560d9abc307f3882718cfd66d2773bcb377ea60d6cd60eb52717122

    根据init后的提示,

    增加一个名为k8s的普通系统用户,并设置为可以免密sudo
    执行kubeadm初始化master配置时提示的kubectl配置方法

    # mkdir -p $HOME/.kube
    # sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    # sudo chown $(id -u):$(id -g) $HOME/.kube/config

    查看docker镜像:

    # docker images
    REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
    k8s.gcr.io/kube-proxy                v1.18.5             a1daed4e2b60        14 months ago       117MB
    k8s.gcr.io/kube-controller-manager   v1.18.5             8d69eaf196dc        14 months ago       162MB
    k8s.gcr.io/kube-apiserver            v1.18.5             08ca24f16874        14 months ago       173MB
    k8s.gcr.io/kube-scheduler            v1.18.5             39d887c6621d        14 months ago       95.3MB
    k8s.gcr.io/pause                     3.2                 80d28bedfe5d        18 months ago       683kB
    k8s.gcr.io/coredns                   1.6.7               67da37a9a360        19 months ago       43.8MB
    k8s.gcr.io/etcd                      3.4.3-0             303ce5db0e90        22 months ago       288MB

    由于kube-apiserver默认只启动安全访问接口6443,而不启动非安装访问接口8080,kubectl是通过8080端口访问k8s kubelet的,所以要修改配置文件,使其支持8080端口访问:

    # nano /etc/kubernetes/manifests/kube-apiserver.yaml
    把–insecure-port=0修改为:
    –insecure-port=8080
    增加或修改
    -insecure-bind-address=0.0.0.0

      # systemctl restart kubelet

      # sysctl net.bridge.bridge-nf-call-iptables=1
      # kubectl get node

    NAME       STATUS   ROLES  AGE VERSION
    k8s-master NotReady master 11m v1.18.5

     

     

    10.安装calico网络

    # yum install -y wget
    # wget http://download.zhufunin.com/k8s_1.18/calico.yaml
    # kubectl apply -f calico.yaml

      # kubectl get pods -n kube-system 隔一段时间看一下,STATUS变为ContainerCreating或者Running

     再执行

    # kubectl get node,此时状态变为Ready

    至此,k8s master节点创建完毕。

    11.Node节点加入集群(在k8s-nnode1和k8s-nnode2)

    # yum install -y wget
    # wget http://download.zhufunin.com/k8s_1.18/1-18-pause.tar.gz
    # wget http://download.zhufunin.com/k8s_1.18/1-18-kube-proxy.tar.gz
    # docker load -i   1-18-pause.tar.gz
    # docker load -i 1-18-kube-proxy.tar.gz

     向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:
    复制上面命令,在node节点上执行
    在k8s-nnode1和k8s-nnode2都执行刚才拿到的:

    #   kubeadm join 192.168.5.141:6443 --token n1anmw.ubhpjr33jdncdg5b \
         --discovery-token-ca-cert-hash sha256:372c1db40560d9abc307f3882718cfd66d2773bcb377ea60d6cd60eb52717122

    然后都执行:

    kubectl -s http://192.168.5.138:8080 get nodes
    mater查看pod

    kubectl get pods  kube-proxy-7jmxj  -n kube-system -o wide
    kubectl get pods -n kube-system -o wide

    node查看连接日志 journalctl
    -f -u kubelet

    如果Node的状态是NotReady,并且日志输出出现Unable to update cni config: No networks found in /etc/cni/net.d

      执行 scp -r 192.168.5.141:/etc/cni /etc/cni

    iptables --flush
    iptables -tnat --flush
    systemctl stop firewalld
    systemctl disable firewalld
    systemctl restart docker
    systemctl restart kubelet
    
    
    
    
  • 相关阅读:
    HDOJ 1677 Nested Dolls(LIS+Dilworth)
    POJ 1548 Robots (Dilworth)
    POJ 1065 Wooden Sticks
    第三百四十天 how can I 坚持
    第三百三十九天 how can I 坚持
    第三百三十八天 how can I 坚持
    第三百三十七天 how can I 坚持
    第三百三十六天 how can I 坚持
    第三百三十五天 how can I 坚持
    第三百三十四天 how can I 坚持
  • 原文地址:https://www.cnblogs.com/wangpengzong/p/15193971.html
Copyright © 2020-2023  润新知