開發與維運

使用 kubeadm 快速部署 K8S V1.18

123.jpeg
鏡像下載、域名解析、時間同步請點擊 阿里巴巴開源鏡像站

1、基礎環境,至少1個Master和1個Worker;
2、基本配置

1) 服務器開啟硬件虛擬化支持;
2) 操作系統版本大於CentOS7.5,Minimal模式,可update到最新版本;
3) 關閉SElinux和Firewalld服務;
#sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
#setenforce 0
#systemctl disable firewalld
#systemctl stop firewalld
4) 設置hostname並在/etc/hosts配置本地解析;
#hostnamectl set-hostname master1.lab.com
5) 關閉Swap服務
#swapoff -a
#sed -i '/swap/d' /etc/fstab
6) 修改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
若提示cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
#modprobe net_brfilter
#sysctl -p

3、所有節點安裝Docker服務

1) 如果已安裝過舊版本需要刪除:
#yum -y remove docker-client docker-client-latest docker-common docker-latest docker-logrotate docker-latest-logrotate \ docker-selinux docker-engine-selinux docker-engine
2) 設置阿里雲docker倉庫,並安裝Docker服務;
#yum -y install yum-utils lvm2 device-mapper-persistent-data nfs-utils xfsprogs wget
#yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#yum -y install docker-ce docker-ce-cli containerd.io
#systemctl enable docker
#systemctl start docker

4、所有節點安裝K8S服務

1) 如果已安裝過舊版本,需要刪除:
#yum -y remove kubelet kubadm kubctl
2) 設置阿里雲的倉庫,並安裝新版本
#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 -y install kubelet kubeadm kubectl
Node節點不需要按照kubectl
3) 修改Docker Cgroup Driver為systemd,如果不修改則在後續添加Worker節點時可能會遇到“detected cgroupfs as ths Docker driver.xx”的報錯信息,並配置Docker本地鏡像庫;
cat > /etc/docker/daemon.json <<EOF
{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m"
    },
    "storage-driver": "overlay2",
    "registry-mirrors":[
        "https://kfwkfulq.mirror.aliyuncs.com",
        "https://2lqq34jg.mirror.aliyuncs.com",
        "https://pee6w651.mirror.aliyuncs.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
    ]
}
4) 重啟Docker,並啟動Kubelet
#systemctl daemon-reload
#systemctl restart docker
#systemctl enable kubelet
#systemctl start kubelet

5、Master節點部署

1) 如果需要初始化Master節點,請執行#kubeadm reset;
2) 配置環境變量:
#echo export MASTER_IP=10.33.0.51 > k8s.env.sh
#echo export APISERVER_NAME=master1.lab.com >> k8s.env.sh
#sh k8s.env.sh
3) Master節點初始化:
#kubeadm init \
        --apiserver-advertise-address 0.0.0.0 \
        --apiserver-bind-port 6443 \
        --cert-dir /etc/kubernetes/pki \
        --control-plane-endpoint master1.lab.com \
        --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
        --kubernetes-version 1.18.2 \
        --pod-network-cidr 10.11.0.0/16 \
        --service-cidr 10.20.0.0/16 \
        --service-dns-domain cluster.local \
        --upload-certs 
# 初始化 Control-plane/Master 節點,命名參數說明

kubeadm init \

--apiserver-advertise-address 0.0.0.0 \
# API 服務器所公佈的其正在監聽的 IP 地址,指定“0.0.0.0”以使用默認網絡接口的地址
# 切記只可以是內網IP,不能是外網IP,如果有多網卡,可以使用此選項指定某個網卡
--apiserver-bind-port 6443 \
# API 服務器綁定的端口,默認 6443
--cert-dir /etc/kubernetes/pki \
# 保存和存儲證書的路徑,默認值:"/etc/kubernetes/pki"
--control-plane-endpoint kuber4s.api \
# 為控制平面指定一個穩定的 IP 地址或 DNS 名稱,
# 這裡指定的 kuber4s.api 已經在 /etc/hosts 配置解析為本機IP
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
# 選擇用於拉取Control-plane的鏡像的容器倉庫,默認值:"k8s.gcr.io"
# 因 Google被牆,這裡選擇國內倉庫
--kubernetes-version 1.17.3 \
# 為Control-plane選擇一個特定的 Kubernetes 版本, 默認值:"stable-1"
--node-name master01 \
#  指定節點的名稱,不指定的話為主機hostname,默認可以不指定
--pod-network-cidr 10.10.0.0/16 \
# 指定pod的IP地址範圍
--service-cidr 10.20.0.0/16 \
# 指定Service的VIP地址範圍
--service-dns-domain cluster.local \
# 為Service另外指定域名,默認"cluster.local"
--upload-certs
# 將 Control-plane 證書上傳到 kubeadm-certs Secret
4) 配置kubectl:
#rm -f .kube && mkdir .kube
#cp -i /etc/kubernets/admin.conf .kube/config
#chown $(id -u):$(id -g) $HOME/.kube/config   //可用於為普通用戶分配kubectl權限

6、安裝Calico網絡插件:

集群必須安裝網絡插件以實現Pod間通信,只需要在Master節點操作,其他Node節點會自動創建相關Pod;
#wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
該配置文件默認採用的Pod的IP地址為192.168.0.0/16,需要修改為集群初始化參數中採用的值,本例中為10.10.0.0/16;
#sed -i "s#192\.168\.0\.0/16#10\.10\.0\.0/16#" calico.yaml
#kubectl apply -f calico.yaml
1) 等待所有容器狀態處於Running狀態:
#watch -n 2 kubectl get pods -n kube-system -o wide
#kubectl get nodes -o wide //查看所有node狀態
2) 獲取join命令參數,並保存輸出結果:
#kubeadm token create --print-join-command > node.join.sh

7、Worker節點部署

1) 如果需要初始化Worker節點,請執行#kubeadm reset;
2) 從Master複製環境變量和加入集群腳本:
#scp master:/root/k8s.env.sh master:/root/mode.join.sh .
#sh k8s.env.sh
#sh node.join.sh
或直接執行
#kubeadm join master1.lab.com:6443 --token e1xszv.7fa46uw7intwcbwi  \
    --discovery-token-ca-cert-hash sha256:2637022ef0928d0b390bf10b246ccf20e00f73966667bc711d683a8d71492e5a
3) 在Master節點查看Worker狀態:
#kubectl get nodes -o wide
4) 移除Worker節點:
在Worker節點執行
#kubeadm reset -f
 在Master節點執行
#kubectl delete node <worker節點主機名>

7、增加Master節點

1) 在待增加Master節點執行
#kubeadm join master1.lab.com:6443 --token e1xszv.7fa46uw7intwcbwi  \
    --discovery-token-ca-cert-hash sha256:2637022ef0928d0b390bf10b246ccf20e00f73966667bc711d683a8d71492e5a\
--control-plane --certificate-key 5253fc7e9a4e6204d0683ed2d60db336b3ff64ddad30ba59b4c0bf40d8ccadcd

8、安裝Ingress Controller

1) 在Master節點執行,具體可以參考https://github.com/nginxinc/kubernetes-ingress/blob/v1.5.3/docs/installation.md
#kubectl apply -f https://kuboard.cn/install-script/v1.16.0/nginx-ingress.yaml

9、安裝Kuboard圖形化管理界面

1) 在Master節點執行
#kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
查看運行狀態,可能需要幾分鐘才能成為Running狀態:
#kubectl get pods -l k8s.eip.work/name=kuboard -n kube-system
2) 獲取Token權限,用於界面登錄
#kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d > admin-token.txt
#kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-viewer | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d > read-only-token.txt
3) 管理節目訪問
http://任意一個Worker節點的IP地址:32567

參考鏈接

阿里巴巴開源鏡像站 提供全面,高效和穩定的鏡像下載服務。釘釘搜索 ' 21746399 ‘ 加入鏡像站官方用戶交流群。”

Leave a Reply

Your email address will not be published. Required fields are marked *