一、服務器分布
二静汤、關閉防火墻
三琅催、關閉selinux
四居凶、關閉swap
五、設置主機名
六藤抡、在master上添加hosts
七侠碧、將橋接的ipv4流量傳遞到iptables的連接
八、時間同步
九缠黍、安裝docker(所有節(jié)點)
十弄兜、安裝cri-dockerd?(所有節(jié)點)
十一、安裝kubeadm瓷式、kubelet和kubectl(所有節(jié)點)
十二替饿、部署kubernetes Master
十三、kubeadm?init做了那些事
十四贸典、加入kubernetes node<node上執(zhí)行>
十五盛垦、部署容器網(wǎng)絡(CNI)
一、服務器分布
主機名Ip配置角色
hs-tmp-153????????192.168.2.153????????8核8G 100G????????dev-k8s-master
hs-app-552????????192.168.2.63? ? ? ? ? ?8核8G 150G????????dev-k8s-node1
hs-develop-560????192.168.2.60????????4核16G100G????????dev-k8s-node2
二瓤漏、關閉防火墻
# systemctl stop firewalld
# systemctl disable firewalld
# iptables –vnL
# iptables -F&&iptables -t nat -F&& iptables -t mangle -F && iptables -X
三腾夯、關閉selinux
# sed -i 's/enforcing/disabled/'/etc/selinux/config
# setenforce 0
四、關閉swap
# swapoff –a
# tail -1 /etc/fstab
#/dev/mapper/centos-swap swap??????????????????? swap??? defaults??????? 0 0? ? 此行注釋掉
五蔬充、設置主機名
# hostname set-hostname
六蝶俱、在master上添加hosts
# cat >> /etc/hosts <<EOF
> 192.168.2.153 hs-tmp-153
> 192.168.2.63 hs-app-552
> 192.168.2.60 hs-develop-560
>EOF
七、將橋接的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
八饥漫、時間同步
# yum search chrony
# egrep -v "^$|^#"/etc/chrony.conf
server ntp.aliyun.com iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
#systemctl start chronyd
#systemctl enable chronyd
#systemctl restart chronyd
# chronyc sources –v
九榨呆、安裝docker(所有節(jié)點)
#yum update
#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-O /etc/yum.repos.d/docker-ce.repo
#yum -y install docker-ce
配置鏡像加速器:
#cat /etc/docker/daemon.json
{
? "registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"],
? "insecure-registries":["192.168.2.51"]
}
# systemctl restart docker.service
十、安裝cri-dockerd (所有節(jié)點)
下載:
# yum localinstall /tmp/cri-dockerd-0.3.4-3.el7.x86_64.rpm
修改文件
# systemctlrestart cri-dockerd
十一庸队、安裝kubeadm积蜻、kubelet和kubectl(所有節(jié)點)
添加阿里云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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#yum -y install kubelet kubeadm kubectl
#systemctl enable kubelet
注:切記不要啟動服務
十二、部署kubernetes Master
192.168.2.153<master>執(zhí)行
#kubeadm init \
--kubernetes-version=v1.27.4\
--apiserver-advertise-address=192.168.2.153\
--image-repositoryregistry.aliyuncs.com/google_containers \
--kubernetes-versionv1.27.4 \
--service-cidr=10.96.0.0/12\
--pod-network-cidr=10.244.0.0/16\
--cri-socketunix:///var/run/cri-dockerd.sock \
--ignore-preflight-errors=all
注解:
--apiserver-advertise-address=集群通告地址
--image-repository由于默認拉去鏡像地址空間k8s.gcr.io國內(nèi)無法訪問彻消,這里指定阿里云鏡像倉庫地址
--kubernetes-version
k8s版本竿拆,與安裝的一直
--service-cidr集群內(nèi)部虛擬網(wǎng)絡,Pod統(tǒng)一訪問入口
--pod-network-cidr
pod網(wǎng)絡宾尚,與下面部署的CNI網(wǎng)絡組件yaml中保持一致
也可使用配置文件引導:
出現(xiàn)下圖丙笋,安裝完成:
拷貝kubectl使用的連接k8s認證文件到默認路徑:
#? mkdir -p $HOME/.kube
#?? sudo cp -i /etc/kubernetes/admin.conf$HOME/.kube/config
#?? sudo chown $(id -u):$(id -g)$HOME/.kube/config
#kubectl get node
NAME???????? STATUS???? ROLES?????????? AGE??? VERSION
hs-tmp-153?? NotReady??control-plane?? 155m?? v1.27.4
十三、kubeadm?init做了那些事
1. [preflight] 環(huán)境檢查和拉取鏡像
2.[certs] 生成證書文件煌贴,存放目錄:/etc/kubernetes/pki
3.[kubeconfig] 生成kubeconfig連接k8s配置文件御板,存放目錄:controller-manager.conf
4.[kubelet-start] 生成kubelet配置文件并啟動
5.[control-plane] 已靜態(tài)pod方式啟動master組建
6.存放master組件配置文件/etc/kubernetes/manifests,存儲配置到k8s configmap中
7.[mark-control-plane] 給master節(jié)點配置role和添加污點(沒有聲明的情況下牛郑,不允許pod分配過來)
8.[bootstrap-token] 為kubelet自動生成證書的一系列配置
9.[addons] 安裝插件怠肋,coreDNS和kube-proxy
10.讓你拷貝kubectl所使用的連接k8s的配置文件到默認路徑
mkdir -p$HOME/.kube
sudo cp -i/etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id-u):$(id -g) $HOME/.kube/config
生成一個node加入集群的命令:
kubeadmjoin 192.168.2.153:6443 --token r24dse.o8bispnfb34cuwly \
???????? --discovery-token-ca-cert-hash
十四、加入kubernetes node<node上執(zhí)行>
#kubeadm join 192.168.2.153:6443 --token r24dse.o8bispnfb34cuwly--discovery-token-ca-cert-hashsha256:4b5ab79c068aabb8ed9c3dda021f1afb28dc4f6126149bd4057928a9cac6ba8a--cri-socket unix:///var/run/cri-dockerd.sock
#kubectl get node<master上執(zhí)行>
NAME???????????? STATUS???? ROLES?????????? AGE???? VERSION
hs-app-552?????? NotReady?? ????????? 3m41s?? v1.27.4
hs-develop-560?? NotReady??????????? 49s???? v1.27.4
hs-tmp-153?????? NotReady?? control-plane?? 163m???v1.27.4
注:
NotReady: 因為網(wǎng)絡沒有準備就緒淹朋,可以通過journalctl –u kubelet> a.log文件中查看
默認token有效期為24小時笙各,當過期之后钉答,改token就不可用了。這時就需要重新創(chuàng)建token酪惭,可以之間使用命令快捷生成:
# kubeadm token create--print-join-command
十五、部署容器網(wǎng)絡(CNI)
注意:只要部署下面其中一個者甲,推薦calico
Calico是一個純?nèi)龑拥臄?shù)據(jù)中心網(wǎng)絡方案春感,caclico支持廣泛的平臺,包括k8s虏缸,openstack等鲫懒。
Calico在每一個計算節(jié)點利用linux kernel實現(xiàn)了一個高效的虛擬路由器(vRouter)來負責數(shù)據(jù)轉(zhuǎn)發(fā),而每個vRouter通過BGP協(xié)議負責把自己上運行的workload的路由信息向整個calico網(wǎng)絡傳播刽辙。
此外窥岩,Calico項目還實現(xiàn)了k8s網(wǎng)絡策略,提供ACL功能
下載文件:
#curlhttps://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml-O
下載完成后還需要修改里面定義Pod網(wǎng)絡(CALICO_IPV4POOL_CIDR)宰缤,與前面的kubeadm init指定的pod-network-cidr一樣颂翼。
修改完成后應用清單:
#kubectl apply -f calico.yaml
#kubectl get pods -n kube-system
#kubectl get nodes
NAME???????????? STATUS?? ROLES?????????? AGE??? ?VERSION
hs-app-552?????? Ready???????????? 129m??? v1.27.4
hs-develop-560?? Ready???????????? 126m??? v1.27.4
hs-tmp-153?????? Ready???control-plane?? 4h48m?? v1.27.4
安裝完成后
NotReady狀態(tài)轉(zhuǎn)換成了Ready狀態(tài)。