k8s安裝
centos7.9最小安裝版本
從零開始的k8s安裝
硬件配置要求
- cpu >= 2核
- 硬盤 >= 20G
- 內(nèi)存 >= 2G
- 節(jié)點數(shù)量建議為奇數(shù)(3, 5, 7, 9等)(1臺好像也能搭,沒試過)
以下命令出除特殊要求外,其余都建議在master主機執(zhí)行
本教程配置如下
主機名 | IP | 配置 |
---|---|---|
master | 192.168.42.150 | 2核+2G+20G |
node1 | 192.168.42.151 | 2核+2G+20G |
node2 | 192.168.42.152 | 2核+2G+20G |
一. 安裝(所有機器都要執(zhí)行)
-
執(zhí)行以下命令安裝必備插件
# yum 更新 sudo yum update -y # tab 命令補全 sudo yum install -y bash-completion # wget sudo yum install -y wget # vim 編輯器 sudo yum install -y vim-enhanced # 網(wǎng)絡(luò)工具 sudo yum install -y net-tools # gcc 編譯器 sudo yum install -y gcc
-
將主機名指向本機IP,主機名只能包含:字母、數(shù)字、-(橫杠)、.(點)
獲取主機名
hostname
設(shè)置主機名
hostnamectl set-hostname 主機名
-
將節(jié)點加入到 hosts 中
cat >> /etc/hosts << EOF 192.168.42.150 master 192.168.42.151 node1 192.168.42.152 node2 EOF
-
設(shè)置時間同步
sudo yum -y install ntpdate sudo ntpdate ntp1.aliyun.com sudo systemctl status ntpdate sudo systemctl start ntpdate sudo systemctl status ntpdate sudo systemctl enable ntpdate
-
關(guān)閉防火墻或者開通指定端口(這里使用關(guān)閉防火墻)
sudo systemctl stop firewalld.service sudo systemctl disable firewalld.service
-
關(guān)閉 swap 交換空間
free -h sudo swapoff -a sudo sed -i 's/.*swap.*/#&/' /etc/fstab free -h
-
關(guān)閉 selinux
getenforce cat /etc/selinux/config sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config cat /etc/selinux/config
-
安裝 docker , Containerd
# 刪除 docker(如果有的話) sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 安裝必備工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 加入 docker 源 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安裝 docker sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # 安裝 containerd sudo yum install -y containerd # 停止 containerd sudo systemctl stop containerd.service # 生成并修改配置文件 sudo cp /etc/containerd/config.toml /etc/containerd/config.toml.bak sudo containerd config default > $HOME/config.toml sudo cp $HOME/config.toml /etc/containerd/config.toml sudo sed -i "s#registry.k8s.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml sudo sed -i "s#SystemdCgroup = false#SystemdCgroup = true#g" /etc/containerd/config.toml # 將 containerd 加入開機自啟 sudo systemctl enable --now containerd.service # 啟動 docker sudo systemctl start docker.service # 將 docker 加入開機自啟 sudo systemctl enable docker.service sudo systemctl enable docker.socket sudo systemctl list-unit-files | grep docker # 設(shè)置 docker 鏡像加速 sudo mkdir -p /etc/docker # 鏡像地址換成你自己的阿里云鏡像地址 sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://z5d2yy4c.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker sudo docker info sudo systemctl status docker.service sudo systemctl status containerd.service
-
添加阿里云 k8s 鏡像倉庫
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ # 是否開啟本倉庫 enabled=1 # 是否檢查 gpg 簽名文件 gpgcheck=0 # 是否檢查 gpg 簽名文件 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
-
轉(zhuǎn)發(fā)IPv4并讓iptables看到橋接流量
cat >/etc/modules-load.d/k8s.conf <<EOF overlay br_netfilter EOF modprobe overlay modprobe br_netfilter cat >/etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 net.ipv4.ip_forward=1 EOF sysctl --system # 通過運行以下指令確認 br_netfilter 和 overlay 模塊被加載 lsmod | egrep 'overlay|br_netfilter' # 通過運行以下指令確認 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 系統(tǒng)變量在你的 sysctl 配置中被設(shè)置為 1 sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
-
安裝 k8s
# 安裝 1.27.1 版本 sudo yum install -y kubelet-1.27.1-0 kubeadm-1.27.1-0 kubectl-1.27.1-0 --disableexcludes=kubernetes --nogpgcheck # 安裝最新版本(生產(chǎn)環(huán)境不建議) # sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes --nogpgcheck systemctl daemon-reload sudo systemctl restart kubelet sudo systemctl enable kubelet
二. 啟動
-
master 初始化(僅在master節(jié)點主機上執(zhí)行)
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --apiserver-advertise-address=192.168.42.150 --kubernetes-version=v1.27.1 # --image-repository 鏡像加速地址,一般不動 # --apiserver-advertise-address master 節(jié)點IP地址,自己改 # --kubernetes-version kubernetes 版本,自己選擇的什么版本就改成什么版本 # 初始化失敗可以使用 kubeadm reset 重置 # 失敗原因多半是因為網(wǎng)絡(luò)問題,可以換個網(wǎng)絡(luò)試試
-
初始化成功后執(zhí)行(僅在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
-
將 node 加入集群(僅在node節(jié)點主句執(zhí)行)不要直接復(fù)制,每個人不一樣
# 執(zhí)行成功后,會出現(xiàn)類似下列內(nèi)容: # kubeadm join 192.168.80.60:6443 --token f9lvrz.59mykzssqw6vjh32 \ # --discovery-token-ca-cert-hash sha256:4e23156e2f71c5df52dfd2b9b198cce5db27c47707564684ea74986836900107 # 將控制臺打印的這句復(fù)制到 node 節(jié)點主機上執(zhí)行就行 # 如果忘記或者過期可以使用以下命令重新生成 # kubeadm token create --print-join-command
-
查看集群狀態(tài)(master 節(jié)點執(zhí)行)
kubectl get nodes
輸出:
NAME STATUS ROLES AGE VERSION master NotReady control-plane 7h21m v1.27.1 node1 NotReady <none> 7h20m v1.27.1 node2 NotReady <none> 7h20m v1.27.1
可以看到所有節(jié)點都是 NotReady ,這是因為還沒有配置網(wǎng)絡(luò)
-
配置網(wǎng)絡(luò)(僅在master節(jié)點執(zhí)行)
k8s與Calico版本對應(yīng)
Kubernetes 版本 Calico 版本 Calico 文檔 1.18、1.19、1.20 3.18 https://projectcalico.docs.tigera.io/archive/v3.18/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.18/manifests/calico.yaml 1.19、1.20、1.21 3.19 https://projectcalico.docs.tigera.io/archive/v3.19/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.19/manifests/calico.yaml 1.19、1.20、1.21 3.20 https://projectcalico.docs.tigera.io/archive/v3.20/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.20/manifests/calico.yaml 1.20、1.21、1.22 3.21 https://projectcalico.docs.tigera.io/archive/v3.21/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.21/manifests/calico.yaml 1.21、1.22、1.23 3.22 https://projectcalico.docs.tigera.io/archive/v3.22/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.22/manifests/calico.yaml 1.21、1.22、1.23 3.23 https://projectcalico.docs.tigera.io/archive/v3.23/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.23/manifests/calico.yaml 1.22、1.23、1.24 3.24 https://projectcalico.docs.tigera.io/archive/v3.24/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.24/manifests/calico.yaml 1.23、1.24、1.25、1.26、1.27 3.25 https://projectcalico.docs.tigera.io/archive/v3.25/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.25/manifests/calico.yaml 或者自己去官網(wǎng)查看版本對應(yīng)關(guān)系
https://docs.tigera.io/calico/latest/getting-started/kubernetes/requirements
下載(網(wǎng)址換成自己版本對應(yīng)的即可)
wget --no-check-certificate https://projectcalico.docs.tigera.io/archive/v3.25/manifests/calico.yaml
下載不了的可以把后面網(wǎng)址復(fù)制到瀏覽器下載下來后在傳到虛擬機
修改 calico.yaml 文件
vim calico.yaml
# 在 - name: CLUSTER_TYPE 下方添加如下內(nèi)容 - name: CLUSTER_TYPE value: "k8s,bgp" # 下方為新增內(nèi)容 - name: IP_AUTODETECTION_METHOD value: "interface=master節(jié)點主機的網(wǎng)卡名稱"
配置網(wǎng)絡(luò)
kubectl apply -f calico.yaml
-
再次查看節(jié)點信息
查看 node 狀態(tài)
kubectl get nodes
輸出:
NAME STATUS ROLES AGE VERSION master NotReady control-plane 21m v1.27.1 node1 NotReady <none> 20m v1.27.1 node2 NotReady <none> 20m v1.27.1
查看 pod 狀態(tài)
kubectl get pods --all-namespaces -o wide
輸出:
[root@master ~]# kubectl get pods --all-namespaces -o wide NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system calico-kube-controllers-f79f7749d-rkqgw 0/1 Pending 0 11s <none> <none> <none> <none> kube-system calico-node-7698p 0/1 Init:0/3 0 11s 192.168.80.60 k8s <none> <none> kube-system calico-node-tvhnb 0/1 Init:0/3 0 11s 192.168.0.18 centos-7-9-16 <none> <none> kube-system coredns-c676cc86f-4lncg 0/1 Pending 0 8m14s <none> <none> <none> <none> kube-system coredns-c676cc86f-7n9wv 0/1 Pending 0 8m14s <none> <none> <none> <none> kube-system etcd-k8s 1/1 Running 0 8m21s 192.168.80.60 k8s <none> <none> kube-system kube-apiserver-k8s 1/1 Running 0 8m18s 192.168.80.60 k8s <none> <none> kube-system kube-controller-manager-k8s 1/1 Running 0 8m18s 192.168.80.60 k8s <none> <none> kube-system kube-proxy-87lx5 1/1 Running 0 6m16s 192.168.0.18 centos-7-9-16 <none> <none> kube-system kube-proxy-rctn6 1/1 Running 0 8m14s 192.168.80.60 k8s <none> <none> kube-system kube-scheduler-k8s 1/1 Running 0 8m18s 192.168.80.60 k8s <none> <none> [root@k8s ~]#
可以看到正在初始化,現(xiàn)在稍等一段時間(多久看網(wǎng)絡(luò)情況)
初始化失敗大部分情況也是因為網(wǎng)絡(luò)原因,建議換個網(wǎng)絡(luò)試試
-
初始化成功
查看 node 狀態(tài)
kubectl get nodes
輸出:
NAME STATUS ROLES AGE VERSION master Ready control-plane 7h21m v1.27.1 node1 Ready <none> 7h20m v1.27.1 node2 Ready <none> 7h20m v1.27.1
全部 Ready
查看 pod 狀態(tài)
kubectl get pods --all-namespaces -o wide
輸出:
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system calico-kube-controllers-6c99c8747f-92ctj 1/1 Running 1 (64m ago) 31m 172.16.219.69 master <none> <none> kube-system calico-node-72n28 1/1 Running 2 (64m ago) 31m 192.168.42.150 master <none> <none> kube-system calico-node-jb2n8 1/1 Running 1 (64m ago) 31m 192.168.42.152 node2 <none> <none> kube-system calico-node-m6ndl 1/1 Running 1 (64m ago) 31m 192.168.42.151 node1 <none> <none> kube-system coredns-7bdc4cb885-6l9dk 1/1 Running 1 (64m ago) 33m 172.16.219.70 master <none> <none> kube-system coredns-7bdc4cb885-j7qlm 1/1 Running 1 (64m ago) 33m 172.16.219.68 master <none> <none> kube-system etcd-master 1/1 Running 1 (64m ago) 33m 192.168.42.150 master <none> <none> kube-system kube-apiserver-master 1/1 Running 1 (64m ago) 33m 192.168.42.150 master <none> <none> kube-system kube-controller-manager-master 1/1 Running 1 (64m ago) 33m 192.168.42.150 master <none> <none> kube-system kube-proxy-558cb 1/1 Running 1 (64m ago) 33m 192.168.42.150 master <none> <none> kube-system kube-proxy-fpk62 1/1 Running 1 (64m ago) 32m 192.168.42.152 node2 <none> <none> kube-system kube-proxy-sm4ph 1/1 Running 1 (64m ago) 32m 192.168.42.151 node1 <none> <none> kube-system kube-scheduler-master 1/1 Running 1 (64m ago) 33m 192.168.42.150 master <none> <none>
全部 Ready
-
k8s 命令補全
! grep -q kubectl "$HOME/.bashrc" && echo "source /usr/share/bash-completion/bash_completion" >>"$HOME/.bashrc" ! grep -q kubectl "$HOME/.bashrc" && echo "source <(kubectl completion bash)" >>"$HOME/.bashrc" ! grep -q kubeadm "$HOME/.bashrc" && echo "source <(kubeadm completion bash)" >>"$HOME/.bashrc" ! grep -q crictl "$HOME/.bashrc" && echo "source <(crictl completion bash)" >>"$HOME/.bashrc" source "$HOME/.bashrc"
-
常用命令
# 獲取節(jié)點 kubectl get nodes -o wide # 實時查詢nodes狀態(tài) watch kubectl get nodes -o wide # 獲取pod kubectl get pods --all-namespaces -o wide # 查看鏡像列表 kubeadm config images list # 節(jié)點加入集群 kubeadm token create --print-join-command # 描述node kubectl describe node k8s-master # 描述pod kubectl describe pod kube-flannel-ds-hs8bq --namespace=kube-system
三. 測試
-
創(chuàng)建一個 nginx 來測試
kubectl create deployment nginx --image=nginx
-
查看狀態(tài)
kubectl get pods -o wide
輸出:
NAME READY STATUS RESTARTS AGE nginx-77b4fdf86c-pfklq 1/1 ContainerCreating 0 72m
等待一段時間,等 ContainerCreating 變成 Running 時進行下一步
-
暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
-
查看 pos 及服務(wù)信息
kubectl get pod,svc
輸出:
NAME READY STATUS RESTARTS AGE pod/nginx-77b4fdf86c-pfklq 1/1 Running 0 76m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7h47m service/nginx NodePort 10.98.106.212 <none> 80:32403/TCP 74m
-
在瀏覽器中訪問
http://192.168.42.150:32403
地址根據(jù)你自己的主機變化,端口上面輸出的信息中 PORT(S) 這一欄會有文章來源:http://www.zghlxwxcb.cn/news/detail-666499.html
訪問成功就說明 k8s 安裝部署成功!文章來源地址http://www.zghlxwxcb.cn/news/detail-666499.html
到了這里,關(guān)于Centos7安裝部署k8s(kubernetes)最新v1.27.1版本超詳細安裝教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!