1. 集群規(guī)劃及基礎(chǔ)操作
1.1. 主機名及IP地址規(guī)劃
主機名 | IP地址 |
---|---|
k8s-master | 172.25.1.100 |
k8s-node1 | 172.25.1.101 |
k8s-node2 | 172.25.1.102 |
1.2. 基礎(chǔ)環(huán)境優(yōu)化
修改主機名
安裝上述規(guī)劃在服務(wù)器上執(zhí)行命令,將主機名與IP地址修改對應(yīng)拴鸵。
hostnamectl set-hostname k8s-master
修改網(wǎng)卡地址
按照規(guī)劃將IP地址與主機名修改對應(yīng)。
vim /etc/sysconfig/network-scripts/ifcfg-eth0
systemctl restart network
添加host解析
cat >> /etc/hosts << EOF
172.25.1.100 k8s-master
172.25.1.101 k8s-node01
172.25.1.102 k8s-node02
EOF
關(guān)閉selinux與防火墻
# 關(guān)閉防火墻
systemctl stop firewalld && systemctl disable firewalld
# 關(guān)閉Selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 臨時
關(guān)閉swap并同步時間
# 關(guān)閉swap
swapoff -a # 臨時
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
# 時間同步
yum install ntpdate -y
ntpdate time.windows.com
2. 安裝軟件
2.1. 全部主機執(zhí)行的操作
安裝并配置docker
# 下載docker源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 安裝docker
yum -y install docker-ce
# 啟動docker并設(shè)置開機啟動
systemctl enable docker && systemctl start docker
# 優(yōu)化下載源
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker
docker info
安裝kubeadm、kubelet苞轿、kubectl
# 添加阿里云的kubernetes源
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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 下載kubelet逛万、kubeadm麦射、kubectl
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
# 設(shè)置kubelet開機自啟
systemctl enable kubelet
2.2. k8s-master執(zhí)行
kubeadm init \
--apiserver-advertise-address=172.25.1.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.21.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
--apiserver-advertise-address
集群通告地址,這里表示為master地址
--image-repository
由于默認拉取鏡像地址k8s.gcr.io國內(nèi)無法訪問敦腔,這里指定阿里云鏡像倉庫地址
--kubernetes-version
K8s版本,需要與剛才安裝的保持一致
--service-cidr
k8s中service的地址范圍
--pod-network-cidr
k8s中pod網(wǎng)絡(luò)的地址范圍恨溜,需要與部署的CNI網(wǎng)絡(luò)插件yaml中的地址保持一致符衔。
上述命令執(zhí)行完畢之后會生成一個類似于如下形式的命令:
kubeadm join 172.25.1.100:6443 --token q47twe.qa81kuygbhs3uqzy \ --discovery-token-ca-cert-hash sha256:63e97ccc0b88ccc471ffe07c8e1cbac2751b09acbb5a25f77f2e09301403f76f
這個命令需要在node節(jié)點上執(zhí)行,用來使node節(jié)點加入集群的糟袁,這里先記下柏腻。
初始化命令執(zhí)行完畢后同樣會生成以下命令,該命令是用來讓kubectl找到集群所使用的系吭,需要在k8s-master節(jié)點上執(zhí)行五嫂。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2.3. k8s-node執(zhí)行
這里提到的命令需要在k8s-node01、k8s-node02上分別執(zhí)行肯尺。
kubeadm join 172.25.1.100:6443 --token q47twe.qa81kuygbhs3uqzy \
--discovery-token-ca-cert-hash sha256:63e97ccc0b88ccc471ffe07c8e1cbac2751b09acbb5a25f77f2e09301403f76f
執(zhí)行完成這條命令沃缘,就行相當將執(zhí)行命令的主機以node的身份加入到了剛才k8s-maser創(chuàng)建的集群中。
通過kubectl get nodes
命令可以看到當前節(jié)點還是NotReady狀態(tài)则吟,這時需要安裝k8s的網(wǎng)絡(luò)查件槐臀,安裝完成后集群狀態(tài)將進入Ready狀態(tài)。
3. 部署網(wǎng)絡(luò)組建Calico并修復CoreDNS
下滿提到的所有命令都是需要在k8s-master節(jié)點上運行的氓仲。
Calico是一個純?nèi)龑拥臄?shù)據(jù)中心網(wǎng)絡(luò)方案水慨,是目前比較主流的k8s網(wǎng)絡(luò)解決方案得糜。通過以下命令下載部署calico的yaml文件,這里需要注意的是需要修改yaml中pod網(wǎng)絡(luò)配置選項CALICO_IPV4POOL_CIDR
的地址與kubeadm init
時--pod-network-cidr
指定的地址一樣晰洒。
CoreDNS是k8s集群內(nèi)部實現(xiàn)DNS解析的重要組件朝抖,但是因為yaml內(nèi)中的鏡像名稱有問題,后期需要手動干預(yù)一下才能正常使用谍珊。
wget https://docs.projectcalico.org/manifests/calico.yaml
# 更改CALICO_IPV4POOL_CIDR地址
vim calico.yaml
# 部署calico
kubectl apply -f calico.yaml
稍等片刻后治宣,執(zhí)行kubectl get pod -A
命令查詢pod運行情況。
可以看到calico個別pod已經(jīng)Running狀態(tài)砌滞,這是需要稍微等待一下所有的calico的pod全部Running侮邀,那么,k8s集群狀態(tài)也就正常了贝润。
但是在上圖中也可以看到绊茧,還有coredns的pod還沒有創(chuàng)建成功,這是因為yaml中的鏡像名稱有問題打掘,這是需要手動干預(yù)一下按傅,通過如下命令幾個完成修復。
docker pull registry.aliyuncs.com/google_containers/coredns:1.8.0
docker tag registry.aliyuncs.com/google_containers/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
上述命令執(zhí)行完成之后需要稍微等待一會胧卤,或者通過
kubectl delete pod -n kube-system coredns-xxxxxxxpodnamexxxxx
刪除對應(yīng)的pod加快啟動唯绍。
此時輸入命令檢查k8s集群狀態(tài),發(fā)現(xiàn)所有節(jié)點都應(yīng)已經(jīng)正常運行枝誊,那么到這里k8s集群就已經(jīng)搭建成功了况芒,基礎(chǔ)功能就已經(jīng)可以使用了。
部署Dashboard面板
Dashboard是一個官方提供的UI叶撒,可用于基本k8s資源管理绝骚。執(zhí)行如下命令進行安裝,這里需要需要注意祠够,為了方便訪問压汪,可以更改Dashboard的service類型來方便訪問。
# 獲取yaml
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml
# 創(chuàng)建用戶
kubectl create serviceaccount dashboard-admin -n kube-system
# 用戶授權(quán)
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 獲取用戶Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
訪問Dashboard地址為:https://nodeIP:30001 這里需要注意古瓤,使用Google瀏覽器無法打開頁面止剖,可以使用Firefox瀏覽器進行打開。訪問頁面的token通過以上命令獲取落君。