簡介
k8s集群有兩種方式
| 方式 | 優(yōu)勢 | 缺點 |
|---|---|---|
| kubeadm | 簡單、快速 | 無法更好的理解k8s各個組件之間的關(guān)系 |
| 二進制包安裝 | 繁瑣、復雜 | 可能更好的理解k8s集群組件的關(guān)系 |
并且集群也分為簡單版和復雜版,此教程采用kubeadm快速搭建一個簡單集群(只有一個maste節(jié)點,兩個工作節(jié)點)
機器規(guī)劃
注:機器至少是2核2G的配置
機器可以是虛擬機、也可以是三臺物理機器。我使用的是三臺centos7的虛擬機!
| hostname | ip地址 | 用途 |
|---|---|---|
| server130 | 192.168.73.130 | master節(jié)點 |
| server131 | 192.168.73.131 | node1節(jié)點 |
| server132 | 192.168.73.132 | node2節(jié)點 |
搭建教程
除特別說明外,以下命令需在三臺機器中都執(zhí)行,建議找一個可以同時在多臺機器中執(zhí)行命令的工具(mac環(huán)境下可以使用item2)
1、配置機器的host文件
vi /etc/hosts
#添加如下內(nèi)容
192.168.73.130 master
192.168.73.131 node1
192.168.73.132 node2
執(zhí)行ping master 看配置是否成功
2、禁用防火墻
#docker會產(chǎn)生很多端口規(guī)則,為了引起不必要的麻煩,自己關(guān)閉掉(反正這個環(huán)境只是學習使用的,生成環(huán)境不要這么做)
systemctl stop firewalld
systemctl disable firewalld
systemctl stop iptables
systemctl disable iptables
3、禁用linux系統(tǒng)的安全服務(wù)
selinux是linux下的一個安全服務(wù),安裝軟件會產(chǎn)生各種奇葩問題,直接禁用掉
vi /etc/selinux/config
#設(shè)置如下內(nèi)容
SELINUX=disabled
4、禁用swap分區(qū)
作用是在物理內(nèi)存使用完之后虛擬磁盤空間作為內(nèi)存使用,開啟此會產(chǎn)生性能影響,在搭建k8s集群的時候如果開啟的話還需要特別說明
vi /etc/fstab
#注釋最后一行(/dev/mapper/centos-swap swap swap defaults 0 0)
5、修改linux內(nèi)核參數(shù)
#修改linux內(nèi)核參數(shù),添加網(wǎng)橋過濾和地址轉(zhuǎn)發(fā)功能
vi /etc/sysctl.d/kubernetes.conf
# 添加如下配置
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
# 重新加載配置
sysctl -p
#加載網(wǎng)橋過濾模塊
modprobe br_netfilter
# 查看網(wǎng)橋過濾模塊是否加載成功
lsmod|grep br_netfilter
6、配置ipvs功能
#安裝ipset、ipvsadm
yum -y install ipset ipvsadm
#添加需要加載的模塊,寫入到腳本文件中
vi /etc/sysconfig/modules/ipvs.modules
#內(nèi)容如下
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
#為腳本文件添加執(zhí)行權(quán)限
chmod +x /etc/sysconfig/modules/ipvs.modules
#執(zhí)行腳本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules
#查詢對應模塊是否加載成功
lsmod |grep -e ip_vs -e nf_conntrack_ipv4
7、安裝docker
已經(jīng)安裝過了就跳過
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo docker run hello-world
#配置docker的倉庫鏡像地址
vi /etc/docker/daemon.json
#內(nèi)容如下
{
"exec-opts":["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://39dvdikp.mirror.aliyuncs.com"]
}
8、統(tǒng)一重啟服務(wù)器
reboot
9、安裝k8s組件
#配置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
#安裝kubernetes的相關(guān)組件
yum -y install kubeadm kubelet kubectl
#配置kubelet的cgroup
vi /etc/sysconfig/kubelet
#內(nèi)容如下
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
#設(shè)置為開機自啟動并啟動
systemctl enable kubelet
10、集群初始化(僅在master上執(zhí)行)
#apiserver-advertise-address為master的ip地址
#kubernetes-version為當前一步安裝的k8s的版本(kubectl version查看安裝的k8s組件版本)
kubeadm init \
--apiserver-advertise-address=192.168.73.130 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.2 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all \
--v=6
最后出現(xiàn)Your Kubernetes control-plane has initialized successfully!內(nèi)容則表示集群初始化成功。最后按照安裝成功后的提示語執(zhí)行一些命令即可。
注意:在加入節(jié)點之前需要先在master上安裝網(wǎng)絡(luò)組件

11、安裝網(wǎng)絡(luò)組件(僅在master上執(zhí)行)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
12、將其他節(jié)點加入到集群中(在非master節(jié)點上執(zhí)行)
# 這個命令在集群初始化成功后會提示 拷貝自己對應的命令執(zhí)行即可
kubeadm join 172.16.255.130:6443 --token adyqwv.wj3x6lkok9xy1gg2 \
--discovery-token-ca-cert-hash sha256:a00f68126fa6afaee5bd77db5a2f389f0a8b4a3ef9d961814f2babf2f815c9ba
13、測試(僅在master上執(zhí)行)
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
#在 web 瀏覽器輸入以下地址,會返回 nginx 歡迎界面
http://192.168.73.130:32409/ (該端口為kubectl get pod,svc命令獲取)