CentOS8部署k8s集群(kubeadm方式)


1.VirtualBox安裝Centos8

2.准備工作

  • 查看網卡信息得到網卡名稱
    nmcli c

  • 設置為自啟動網卡(ONBOOT=yes)
    nmcli connection modify enp0s3 connection.autoconnect yes

  • 手動設置ip地址
    nmcli connection modify enp0s3 ipv4.method manual ipv4.addresses 192.168.56.101/24

  • 設置網關(virtualbox的全局網卡ip)
    nmcli connection modify enp0s3 ipv4.gateway 192.168.56.1

  • 添加DNS
    nmcli connection modify enp0s3 ipv4.dns 192.168.56.1

  • 重啟網卡(不生效,需要重啟虛擬機才生效)
    nmcli c reload

  • 查看ip是否配置成功
    ip a

  • 重啟服務器
    shutdown -r now

  • 關閉 swap
    刪除 swap 區所有內容
    swapoff -a
    刪除 swap 掛載,系統下次啟動不會掛載 swap
    sed -i 's/.*swap.*/#&/' /etc/fstab

  • 關閉selinux 
    setenforce 0
    sed -i 's/^SELINUX=Enforcing$/SELINUX=Permissive/' /etc/selinux/config
    查看selinux狀態
    getenforce

  • 清空iptables規則鏈和關閉防火牆
    iptables -F
    iptables -X
    systemctl stop firewalld
    systemctl disable firewalld
    查看防火牆狀態
    systemctl status firewalld

  • 將橋接的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

  • 卸載Centos8自帶的podman   yum remove podman

3.安裝Docker(版本:19.03)

  • 安裝必要的一些系統工具
    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

  • 更新yum源后清除緩存再重新生成索引緩存加快安裝速度
    yum clean all
    yum makecache

  • 列出docker版本
    yum list docker-ce.x86_64 --showduplicates | sort -r

  • 安裝指定版本的docker-ce docker-ce-cli containerd.io(19.03.14-3.el8)
    yum install -y docker-ce-19.03.14-3.el8 docker-ce-cli-19.03.14-3.el8 containerd.io-1.4.3-3.1.el8

  • 啟動Docker
    systemctl start docker

  • 設置開機啟動
    systemctl enable docker

  • 查看docker狀態
    systemctl status docker

  • 鏡像加速 在配置文件/etc/docker/daemon.json 中加入(沒有則創建) { "registry-mirrors": ["https://d8b3zdiw.mirror.aliyuncs.com","https://hub-mirror.c.163.com"] }

  • 修改Docker的Cgroup Driver與kubelet的Cgroup Driver保持一致
    vim /usr/lib/systemd/system/docker.service
    添加參數 --exec-opt native.cgroupdriver=systemd
    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd
    重載服務配置文件
    systemctl daemon-reload
    重啟Docker服務
    systemctl restart docker
    查看Cgroup Driver為systemd
    docker info | grep Cgroup

  • 版本裝錯了解決方案
    yum remove -y docker-ce docker-ce-cli containerd.io
    yum install -y docker-ce-19.03.14-3.el8 docker-ce-cli-19.03.14-3.el8 containerd.io-1.4.3-3.1.el8

4.安裝k8s(版本1.19.2)

  • 添加阿里雲YUM軟件源
    cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF

  • 更新yum源后清除緩存再重新生成索引緩存加快安裝速度
    yum clean all
    yum makecache

  • 安裝kubeadm,kubelet和kubectl
    yum install -y kubelet-1.19.2 kubeadm-1.19.2 kubectl-1.19.2 --disableexcludes=kubernetes --disableexcludes=kubernetes 禁掉除了這個之外的別的倉庫

  • 激活kubelet並啟動
    systemctl enable --now kubelet --now設置為開機自動激活單元並現在立刻啟動

  • 加載br_netfilter模塊
    modprobe br_netfilter
    查看模塊列表
    lsmod | grep br_netfilter

5.啟動k8s主節點

  • 設置主機名並生效
    sudo nmcli g hostname k8s-master
    systemctl restart systemd-hostnamed

  • 配置hosts
    vim /etc/hosts
    192.168.1.74 k8s-master
    192.168.1.75 k8s-node1

  • 重置kubeadm(第一次安裝不需要)
    kubeadm reset 
    rm -rf /etc/kubernetes/pki
    rm -rf /etc/cni/net.d
    rm -rf $HOME/.kube
    刪除k8s網卡(會自動重建),以防cni0的IP地址段與flannel subnet地址段不同
    ifconfig flannel.1 down 
    ip link delete flannel.1
    ifconfig cni0 down
    ip link delete cni0
    iptables -F && iptables -t nat -F iptables -X

  • 初始化kubeadm
    kubeadm init --kubernetes-version=v1.19.2 --apiserver-advertise-address 192.168.1.74 --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers
    --apiserver-advertise-address:Master節點的ip地址
    --pod-network-cidr:指定 Pod 網絡的范圍。Kubernetes 支持多種網絡方案,而且不同網絡方案對 –pod-network-cidr有自己的要求,這里設置為10.244.0.0/16 是因為我們將使用 flannel 網絡方案,必須設置成這個 CIDR
    --image-repository:這個用於指定從什么位置來拉取鏡像(1.13版本才有的),默認值是k8s.gcr.io,我們將其指定為國內鏡像地址:registry.aliyuncs.com/google_containers

  • 記錄token
    kubeadm join 192.168.1.74:6443 --token ei6o4e.1heimz9zqsa2cab8 \ --discovery-token-ca-cert-hash sha256:fb39bae49d4d88ae4d377349c4e61eae9bd3ad810438f33dfff44e251bb9c9e9

  • 創建kubectl
    rm -rf $HOME/.kube
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

  • 去掉scheduler、controller-manager端口限制
    vim /etc/kubernetes/manifests/kube-scheduler.yaml刪除--port=0(注意是刪除,在行首加#會出錯的)vim /etc/kubernetes/manifests/kube-controller-manager.yaml刪除--port=0
    重啟kubelet
    systemctl restart kubelet
    查看kube-scheduler和kube-controller-manager組件是否正常
    kubectl get cs

  • 修改apiserver對外映射端口范圍(默認為30000-50000)
    vim /etc/kubernetes/manifests/kube-apiserver.yaml
    添加下面的配置 
    - --service-node-port-range=1-65535
    重啟kubelet
    systemctl restart kubelet

  • 安裝網絡插件 flannel
    1.下載fannel.yml文件
    cd /root
    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    域名raw.githubusercontent.com無法解析就用站長工具查詢對應ip修改hosts文件
    2.解決flannel因網卡名啟動失敗問題
    找到name: kube-flannel節點,在args節點下添加(可添加多個)
    - --iface=enp0s3
    3.解決Failed to ensure iptables rules: Error checking rule existence: failed to check rule existence: running
    調高limits
    resources: requests: cpu: "100m" memory: "50Mi" limits: cpu: "500m" memory: "500Mi"
    4.安裝flannel
    kubectl delete -f /root/kube-flannel.yml
    kubectl apply -f /root/kube-flannel.yml

6.啟動k8s子節點

    • 加入主節點
      kubeadm join 192.168.1.74:6443 --token ei6o4e.1heimz9zqsa2cab8 \ --discovery-token-ca-cert-hash sha256:fb39bae49d4d88ae4d377349c4e61eae9bd3ad810438f33dfff44e251bb9c9e9
      如果token超過一天過期,執行
      kubeadm token create --print-join-command
      生成一個永不過期的token
      kubeadm token create --ttl 0

    • 在Master節點使用kubectl工具查看節點狀態
      kubectl get nodes
      kubectl cluster-info
      kubectl get cs


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM