版本:kubernetes(k8s) v1.28.2文章來源:http://www.zghlxwxcb.cn/news/detail-773631.html
1 準(zhǔn)備工作
- 并準(zhǔn)備主機(jī)名映射。
設(shè)置好靜態(tài)IP。
在Ubuntu的/etc/hosts文件中,填入如下內(nèi)容。也可以在Windows的C:\Windows\System32\drivers\etc\hosts文件中填寫相同內(nèi)容。192.168.88.131 node1 192.168.88.132 node2 192.168.88.133 node3
- 關(guān)閉防火墻和SELinux。
- 關(guān)閉防火墻命令如下。
可使用命令systemctl stop firewalld systemctl disable firewalld
systemctl status firewalld
查看防火墻狀態(tài)。 - 關(guān)閉SELinux命令如下。
# 方法一: sudo vim /etc/selinux/config # 將SELINUX=enforcing改為SELINUX=disabled # 保存退出后,重啟虛擬機(jī)即可,千萬要注意disabled單詞不要寫錯(cuò),不然無法啟動(dòng)系統(tǒng) # 方法二: setenforce 0
- 關(guān)閉防火墻命令如下。
- 關(guān)閉swap分區(qū)
臨時(shí)關(guān)閉:sudo swapoff -a
永久關(guān)閉swap:sudo sed -ri 's/.*swap.*/#&/' /etc/fstab
- 設(shè)置內(nèi)核參數(shù)
安裝bridge-utils,命令為sudo apt-get install -y bridge-utils
。
使用 modprobe 加載,命令為udo modprobe br_netfilter
。使用命令lsmod | grep br_netfilter
就能看到 br_netfilter 模塊。
使用命令sudo sysctl -a | grep bridge
確認(rèn)內(nèi)核參數(shù) net.bridge.bridge-nf-call-iptables 是否為 1。若不為1,使用下面的命令來修改:cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system
2. 安裝docker
- 安裝見其他筆記:https://blog.csdn.net/White_Ink_/article/details/133548415?spm=1001.2014.3001.5501
- 修改cgroup管理器
ubuntu 系統(tǒng),debian 系統(tǒng),centos7 系統(tǒng),都是使用 systemd 初始化系統(tǒng)的。systemd 這邊已經(jīng)有一套 cgroup 管理器了,如果容器運(yùn)行時(shí)和 kubelet 使用 cgroupfs,此時(shí)就會(huì)存在 cgroups 和 systemd 兩種 cgroup 管理器。也就意味著操作系統(tǒng)里面存在兩種資源分配的視圖,當(dāng)操作系統(tǒng)上存在 CPU,內(nèi)存等等資源不足的時(shí)候,操作系統(tǒng)上的進(jìn)程會(huì)變得不穩(wěn)定。
在/etc/docker/daemon.json中添加以下內(nèi)容。"exec-opts": [ "native.cgroupdriver=systemd" ],
3. 安裝kubelet、kubeadm、kubectl
- 設(shè)置阿里鏡像源
sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF sudo apt-get update
- 安裝kubeadm kubectl
sudo apt-get install -y kubelet kubeadm kubectl # 也可以指定安裝版本 sudo apt-get install -y kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2 # 阻止自動(dòng)更新(apt upgrade時(shí)忽略)。所以更新的時(shí)候先unhold,更新完再hold。 sudo apt-mark hold kubelet kubeadm kubectl
4. cri環(huán)境配置
- 下載
從github上下載文件。
或使用命令wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.6/cri-dockerd-0.3.6.amd64.tgz
- 解壓
tar -zxvf cri-dockerd-0.3.6.amd64.tgz sudo mv ./cri-dockerd/cri-dockerd /usr/local/bin/ cri-dockerd --version
- 配置
在/etc/systemd/system/cri-dockerd.service中添加以下內(nèi)容。
在/etc/systemd/system/cri-dockerd.socket中添加以下內(nèi)容。[Unit] Description=CRI Interface for Docker Application Container Engine Documentation=https://docs.mirantis.com After=network-online.target firewalld.service docker.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --docker-endpoint=unix:///var/run/docker.sock -- cri-dockerd-root-directory=/var/lib/docker ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=always StartLimitBurst=3 StartLimitInterval=60s LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity Delegate=yes KillMode=process [Install] WantedBy=multi-user.target
[Unit] Description=CRI Docker Socket for the API PartOf=cri-docker.service [Socket] ListenStream=/var/run/cri-dockerd.sock SocketMode=0660 SocketUser=root SocketGroup=docker [Install] WantedBy=sockets.target
- 啟動(dòng)服務(wù)
重新加載配置:sudo systemctl daemon-reload
設(shè)置為開機(jī)自啟動(dòng):sudo systemctl enable cri-dockerd
啟動(dòng)服務(wù):sudo systemctl start cri-dockerd
檢查服務(wù)狀態(tài):sudo systemctl status cri-dockerd
5. 初始化master
- 方法一
這里使用了阿里云的鏡像,然后使用了非默認(rèn)的CIDR,一定要和宿主機(jī)的局域網(wǎng)的CIDR不一樣。
這里會(huì)生成kubeadm join命令,先記下來,用于work節(jié)點(diǎn)的加入。sudo kubeadm init --kubernetes-version=1.28.2 \ --apiserver-advertise-address=192.168.221.3 \ --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --cri-socket=unix:///var/run/cri-dockerd.sock
- 方法二
生成默認(rèn)配置文件
可選擇修改配置文件以下內(nèi)容:kubeadm config print init-defaults > init.default.yaml
使用下面命令初始化。# 修改地址 節(jié)點(diǎn)IP地址 localAPIEndpoint.advertiseAddress: 192.168.11.190 # 修改套接字 nodeRegistration.criSocket: unix:///var/run/cri-dockerd.sock # 修改節(jié)點(diǎn)名稱 nodeRegistration.name: k8s-master1 # 修改鏡像倉庫地址為國內(nèi)開源鏡像庫 imageRepository: registry.aliyuncs.com/google_containers # 增加podSubnet,由于后續(xù)會(huì)安裝flannel 網(wǎng)絡(luò)插件,該插件必須在集群初始化時(shí)指定pod地址 # 10.244.0.0/16 為flannel組件podSubnet默認(rèn)值,集群配置與網(wǎng)絡(luò)組件中的配置需保持一致 networking.podSubnet: 10.244.0.0/16
sudo kubeadm init --config init.default.yaml
- non-root用戶使用kubectl
如果是non-root用戶,執(zhí)行下面命令可使其可以使用kubectl命令。mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
6. 加入work節(jié)點(diǎn)
- 加入節(jié)點(diǎn)
在work節(jié)點(diǎn)上運(yùn)行如下命令。注意是使用上一步生成的。kubeadm join 192.168.221.3:6443 --token 16pw7a.7hp1yvbboanjv1ba \ --cri-socket=unix:///var/run/cri-dockerd.sock \ --discovery-token-ca-cert-hash sha256:5457a1a48c135a37da0e12e075e444abbbd14b30c179e6fa99c9cf47793fd62c
- 驗(yàn)證
顯示一下信息則加入成功。
在mster節(jié)點(diǎn)上輸入This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received. * The Kubelet was informed of the new secure connection details.
kubectl get nodes
查看已經(jīng)加入的節(jié)點(diǎn)。
7. 配置網(wǎng)絡(luò)插件
下面只在master上執(zhí)行。以下選擇其中一個(gè)配置即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-773631.html
7.1 fannal
- 獲取fannel的配置文件
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
- 修改文件中quay.io倉庫為quay-mirror.qiniu.com
- 使用配置文件啟動(dòng)fannel
kubectl apply -f kube-flannel.yml
- 稍等片刻,再次查看集群節(jié)點(diǎn)的狀態(tài)
結(jié)果為:kubectl get nodes
NAME STATUS ROLES AGE VERSION master Ready master 15m v1.17.4 node1 Ready 8m53s v1.17.4 node2 Ready 8m50s v1.17.4
7.2 weave net
- 部署weave net
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
- 再次查看集群節(jié)點(diǎn)的狀態(tài)
結(jié)果為:kubectl get nodes
NAME STATUS ROLES AGE VERSION master Ready master 15m v1.17.4 node1 Ready 8m53s v1.17.4 node2 Ready 8m50s v1.17.4
報(bào)錯(cuò)記錄
- [ERROR CRI]: container runtime is not running: output: time=“2023-10-24T19:20:04+08:00” level=fatal msg=“validate service connection: CRI v1 runtime API is not implemented for endpoint “unix:///var/run/containerd/containerd.sock”: rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService”
解決: 注釋/etc/containerd/config.toml中的disabled_plugins = ["cri"]
,并重啟containerd,重啟命令為systemctl restart containerd
。 - [ERROR Port-10250]: Port 10250 is in use
解決:systemctl stop kubelet
- [kubelet-check] Initial timeout of 40s passed.
以下是具體內(nèi)容。
解決: 修改/var/run/cri-dockerd.sock權(quán)限,Unfortunately, an error has occurred: timed out waiting for the condition This error is likely caused by: - The kubelet is not running - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled) If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands: - 'systemctl status kubelet' - 'journalctl -xeu kubelet' Additionally, a control plane component may have crashed or exited when started by the container runtime. To troubleshoot, list all containers using your preferred container runtimes CLI. Here is one example how you may list all running Kubernetes containers by using crictl: - 'crictl --runtime-endpoint unix:///var/run/cri-dockerd.sock ps -a | grep kube | grep -v pause' Once you have found the failing container, you can inspect its logs with: - 'crictl --runtime-endpoint unix:///var/run/cri-dockerd.sock logs CONTAINERID' error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster To see the stack trace of this error execute with --v=5 or higher
sudo chmod 777 /var/run/cri-dockerd.sock
。
到了這里,關(guān)于kubernetes(k8s) 安裝與部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!