理論
實戰-主機安裝
本次環境搭建需要安裝三臺linux系統(一主二從),內置Centos7.5系統,然后在每臺linux中分別安裝docker(18.06.3)、kubeadm(1.18.0)、kubectl(1.18.0)和kubelet(1.18.0),
基礎配置
配置網路
基礎配置
DEVICE=ens33
BOOTPROTO=static
IPADDR=192.168.5.101
NETMASK=255.255.255.0
GATEWAY=192.168.5.1
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
IPV6INIT=no
DNS1=192.168.5.1
IP分別為
192.168.5.100
192.168.5.101
192.168.5.102
192.168.5.103
配置主機名
hostnamectl set-hostname build
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
主機名分別為
構建機:build
master節點:master
node節點:node1
node節點:node2
配置免密登錄
# 將公鑰復制到目標主機
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
# 配置~/.ssh/config
Host build
HostName 192.168.5.100
User root
Port 22
IdentityFile ~/.ssh/id_rsa
Host master
HostName 192.168.5.101
User root
Port 22
IdentityFile ~/.ssh/id_rsa
Host node1
HostName 192.168.5.102
User root
Port 22
IdentityFile ~/.ssh/id_rsa
Host node2
HostName 192.168.5.103
User root
Port 22
IdentityFile ~/.ssh/id_rsa
環境初始化
主機名決議
# 編輯每臺服務器的/etc/hosts檔案,添加下面內容
vi /etc/hosts
192.168.5.100 build build.devops.com
192.168.5.101 master master.devops.com
192.168.5.102 node1 node1.devops.com
192.168.5.103 node2 node2.devops.com
windows的host配置地址為:C:\Windows\System32\drivers\etc\hosts
192.168.2.100 build build.devops.com
192.168.2.101 master master.devops.com
192.168.2.102 node1 node1.devops.com
192.168.2.103 node2 node2.devops.com
時間同步
# 啟動chronyd服務
systemctl start chronyd
# 設定chronyd服務開機自啟
systemctl enable chronyd
# chronyd服務啟動稍等幾秒鐘,就可以使用date命令驗證時間了
date
禁用iptables和firewalld服務
# 1 關閉firewalld服務
systemctl stop firewalld
systemctl disable firewalld
# 2 關閉iptables服務
systemctl stop iptables
systemctl disable iptables
禁用selinux
# 查看是否開啟
getenforce
# 永久關閉selinux,需要重啟
sed -i 's/enforcing/disabled/' /etc/selinux/config
禁用swap磁區
# 編輯磁區組態檔/etc/fstab,注釋掉swap磁區一行
# 注意修改完畢之后需要重啟linux服務
vi /etc/fstab
UUID=455cc753-4c17-a424-7741728c44a1 /boot xfs defaults 0 0
/dev/mapper/centos-home xfs defaults 0 0
# /dev/mapper/centos-swap swap swap defaults 0 0
修改Linux內核引數
# 修改Linux的內核引數,添加網橋過濾和地址轉發功能
# 編輯/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
# 加載網橋過濾模塊
modprobe br_netfilter
# 查看網橋過濾模塊是否加載成功
lsmod | grep br_netfilter
配置ipvs功能
# 1 安裝ipset和ipvsadm
yum install ipset ipvsadmin -y
# 2 添加需要加載的模塊寫入腳本檔案
cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
# 3 為腳本檔案添加執行權限
chmod +x /etc/sysconfig/modules/ipvs.modules
# 4 執行腳本檔案
/bin/bash /etc/sysconfig/modules/ipvs.modules
# 5 查看對應的模塊是否加載成功
lsmod | grep -e ip_vs
lsmod | grep -e nf_conntrack_ipv4
重啟服務器
reboot
部署k8s v1.18.0
每個節點安裝Docker、kubeadm、kubelet和kubectl
安裝Docker
# 確保有wget命令
yum install -y wget
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-18.06.3.ce-3.el7
systemctl enable docker && systemctl start docker
docker version
設定Docker鏡像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://zo8hp0ck.mirror.aliyuncs.com"],
"live-restore": true,
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}
EOF
sudo systemctl daemon-reload && sudo systemctl restart docker
添加阿里云的YUM軟體源
由于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
安裝kubeadm、kubelet和kubectl
由于版本更新頻繁,這里指定版本號部署
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
為了實作Docker使用cgroup driver和kubelet使用的cgroup driver一致,建議個性"/etc/sysconfig/kubelet"檔案的內容
vi /etc/sysconfig/kubelet
# 修改
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
設定為開機自啟動即可,由于沒有生成組態檔,集群初始化后自動啟動
systemctl enable kubelet
查看k8s所需鏡像
kubeadm config images list
部署k8s的Master節點
部署k8s的Master節點 192.168.2.101
# 由于默認拉取鏡像地址k8s.gcr.io國內無法訪問,這里需要指定阿里云鏡像倉庫地址
kubeadm init \
--apiserver-advertise-address=192.168.2.101 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
# v1.23.6
kubeadm init \
--apiserver-advertise-address=192.168.2.101 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5MlHqApa-1666001679982)(images/220927_從0到1實作一套CICD流程之CD第二版/image-20221002004239431.png)]
根據訊息提示,在Master節點上使用kubectl工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
部署k8sNode節點
根據訊息提示,在node1和node2上添加如下命令
kubeadm join 192.168.2.101:6443 --token 2da9w5.bug3ufqeq03t1fvv \
--discovery-token-ca-cert-hash sha256:6a17c546fe1ecb0521eb81a2691d51bfb4602a694264c96cff0f02c03f5f0faf

默認token有效期為24小時,當過期后,該token就不能用了,這時可以使用如下命令創建token
kubeadm token create --print-join-command
或者用如下命令生成一個永不過期的token
kubeadm token create --ttl 0 --print-join-command
安裝網路插件
kubernetes支持多種網路插件,比如flannel、callco、canal等等,任選一種使用即可,本次選擇flannel
下面操作依舊只在master節點執行即可,插件使用的是DaemonSet的控制器,它會在每個節點上運行
# 獲取flannel的組態檔
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 修改檔案中quay.io倉庫為quay-mirror.qiniu.com
# 使用組態檔啟動flannel
kubectl apply -f kube-flannel.yml
# 稍等片刻,再次查看集群節點的狀態
kubectl get nodes

至此,kubernetes的集群環境搭建完成
服務部署
接下來在kubernetes集群中部署一個nginx程式,測驗下集群是否正常作業
# 1 部署nginx
kubectl create deployment nginx --image=nginx:1.14-alpine
# 2 暴露埠
kubectl expose deployment nginx --port=80 --type=NodePort
# 3 查看服務狀態
kubectl get pods,svc
# 4 最后在電腦上訪問下部署的nginx服務
http://192.168.2.101:30054

卸載k8s
# 在卸載K8s組件前,先執行kubeadm reset命令,清空K8s集群設定卸載管理組件
kubeadm reset
# 卸載管理組件
yum erase -y kubelet kubectl kubeadm kubernetes-cni
# docker全部清理
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
# docker 重啟
systemctl daemon-reload
systemctl restart docker
systemctl stop docker service
部署k8s v1.23.6
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/516401.html
標籤:其他
