基于centos 7.2部署k8s v1.18.0叢集
最近k8s的官方版本已經更新到最新版本,小編在centos7.2的系統上部署最新的v1.18.0
并将安裝步驟記錄下來,本文對k8s的基礎知識不做介紹,如果想了解基本知識請移步
k8s官網查閱。
元件版本:
Kubernetes v1.18.0
calico 3.13.1
docker 19.03.8
一 環境準備和部署方式
1 環境準備
Kubernetes系統可運作于多種平台之上,包括虛拟機、裸伺服器或PC等,若僅用于快速了解或開發的目的,那麼可直接于單個主機之上部署Kubernetes叢集,将叢集的所有元件均部署運作于單台主機上,本文想學習Kubernetes叢集的完整功能,應該建構真正的分布式叢集環境,将Master和Node等部署于多台主機之上,本文采用1 master+2 node的形式,
三台主機:
角色 作業系統 記憶體 cpu 磁盤/GB Ip位址
Master Centos7.2 4 2 40 172.20.128.6
Node1 Centos7.2 4 2 40 172.20.128.7
Node2 Centos7.2 4 2 40 172.20.128.8
第二種:
采用kubeadm工具進行部署,由k8s官方所提供的專門部署叢集的管理工具, 每一個節點主機上包括master節點都要手動安裝并運作docker,同時也都要手動安裝并運作kubelet。如果将第一個節點初始化為master節點,在執行初始化這個步驟,其實就是通過kubeadm工具将API Server、etcd、controller-manager、scheduler各元件運作為Pod,也就是跑在docker上。而其他node節點,因已經運作了kubelet、docker元件,剩下的kube-proxy元件也是要運作在Pod上。
本文采用kubeadm工具進行部署,kubeadm是Kubernetes項目自帶的叢集建構工具,它負責執行建構一個最小化的可用叢集以及将其啟動等的必要基本步驟,簡單來講,kubeadm是Kubernetes叢集全生命周期的管理工具,可用于實作叢集的部署、更新/降級及拆除,下圖為kubeadm的功能示意圖。

二 環境部署
1 環境檢查
a) 主機名稱
三個主機分别命名為master.k8s.com、node1.k8s.com、node2.k8s.com
hostnamectl set-hostname your-new-host-name
b) 檢視修改結果
hostnamectl status
c) 設定 hostname 解析
echo "127.0.0.1 $(hostname)" >> /etc/hosts
d) 檢查網絡
ip address可顯示預設網卡的 IP 位址,Kubernetes 将使用此 IP 位址與叢集内的其他節點通信如 172.20.128.6,所有節點上 Kubernetes 所使用的 IP 位址必須可以互通(無需 NAT 映射、無安全組或防火牆隔離)
2 安裝docker及kubelet
在 master 節點和 worker 節點都要執行
export REGISTRY_MIRROR=
https://registry.cn-hangzhou.aliyuncs.coma) 檢查和解除安裝舊版本(如果之前有安裝docker)
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
b) 配置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.repoc) 安裝并啟動docker
yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io
systemctl enable docker
systemctl start docker
d) 安裝 nfs-utils
yum install -y nfs-utils
yum install -y wget
e) 關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
f) 關閉selinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
g) 關閉swap
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
h) 解除安裝舊安裝版本
yum remove -y kubelet kubeadm kubectl
yum install -y kubelet kubeadm kubectl
i) 修改docker Cgroup Driver為systemd
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
j) 設定 docker 鏡像,提高 docker 鏡像下載下傳速度和穩定性
curl -sSL
https://kuboard.cn/install-script/set_mirror.sh| sh -s ${REGISTRY_MIRROR}
k) 重新開機 docker,并啟動 kubelet
systemctl daemon-reload
systemctl restart docker
systemctl enable kubelet && systemctl start kubelet
docker version
3 初始化master節點
設定環境變量:
export MASTER_IP=172.20.128.6
export APISERVER_NAME=apiserver.demo
export POD_SUBNET=10.100.0.1/16
echo "172.20.128.6 ${APISERVER_NAME}" >> /etc/hosts
配置kubeadm-config.yaml檔案
cat < ./kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.18.0
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
controlPlaneEndpoint: "172.20.128.6:6443"
networking:
serviceSubnet: "10.96.0.0/16"
podSubnet: "10.100.0.1/16"
dnsDomain: "cluster.local"
EOF
kubeadm init
kubeadm init --config=kubeadm-config.yaml --upload-certs
執行完畢後如下截圖。
kubeadm join 172.20.128.6:6443 --token 4sad52.9lqsr40fmmi29723 --discovery-token-ca-cert-hash sha256:edddce9484037bc6e2d19f3c7ce53c629cb97c198f761c9de49463be85a21dc5
3 配置 kubectl
rm -rf /root/.kube/
mkdir /root/.kube/
cp -i /etc/kubernetes/admin.conf /root/.kube/config
4 安裝 calico 網絡插件
wget
https://kuboard.cn/install-script/calico/calico-3.13.1.yamlkubectl apply -f calico-3.13.1.yaml
5 master上驗證
執行指令驗證叢集狀态已經正常
kubectl get nodes
kubectl get nodes -o wide
到此,基于centos7.2的K8S v1.18.0叢集安裝完畢并驗證叢集運作正常。