虛擬機器centos安裝k8s 1.22
阿新 • • 發佈:2021-11-21
0. 虛擬機器
虛擬機器只需要關注兩項:
-
硬體資源:建議最低2核心+2G,避免在安裝k8s時告警
-
網路連通性:
-
能聯通外網
-
虛擬機器之間可以互聯互通
-
主機與虛擬機器之間可以互聯互通
-
我使用的是Mac+VMware Fusion V11.1.0,保證網路連通性做了3步:
-
在centos中使用靜態IP
-
虛擬機器的網路調整為橋接模式
-
關閉VMWare預設的DHCP
1. 主節點安裝CetnOS並設定
省略centos安裝過程,我安裝的是
CentOS-7-x86_64-Minimal-2009
- 安裝時僅設定了時區為上海
- 以下操作都基於Bash
- 以下操作都使用root使用者
- 設定靜態IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static #這裡要改 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=cda6fb79-d025-4f63-8224-8e2694303e8f DEVICE=ens33 ONBOOT=yes #這裡要改 # 後面全是加的,需要按實際情況修改 IPADDR=192.168.0.90 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 DNS1=223.5.5.5 DNS2=114.114.114.114
配置完ip重啟後就可以通過外部的命令列進行ssh連線訪問了,無需使用虛擬機器自帶的視窗
- 安裝常用軟體
yum install -y nano wget git tree
- 配置系統
# 關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
# 關閉selinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0
# 永久關閉swap
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
- 聯網對時
yum install ntpdate -y
ntpdate ntp1.aliyun.com
- 設定橋接引數
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
- 修改host(需按實際情況修改)
# 修改自己的hostname
hostnamectl set-hostname master
# 新增host
cat >> /etc/hosts << EOF
192.168.0.90 master
192.168.0.91 node01
192.168.0.92 node02
EOF
修改完建議重啟
7. 配置docker
# 安裝docker
wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
# 設定docker相關引數
mkdir -p /etc/docker/
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts":["native.cgroupdriver=systemd"],
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF
# 設定為服務並開啟服務
systemctl start docker & systemctl enable docker
- 安裝k8s
# 關閉不需要的服務
systemctl stop postfix && systemctl disable postfix
# 安裝k8s全家桶
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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubeadm-1.22.2 kubelet-1.22.2 kubectl-1.22.2
# 新增環境變數
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
2. 複製虛擬機器
因為虛擬機器可以方便的複製,因此從節點可以直接複製主節點的映象.
在本例中複製兩個從節點,並做好以下配置:
- 修改ip為每個從節點的IP,需與host檔案對應
- 修改hostname為每個從節點的hostname,需與host檔案對應
修改完重啟後可以在主從節點中ping其他的兩個節點的ip和hostname,此時應該都能通.
3. 主節點初始化k8s
- 主節點初始化k8s,如果虛擬機器資源較少,可以設定忽略cpu和記憶體報警
apiserver-advertise-address要填主節點的ip
kubeadm init \
--apiserver-advertise-address=192.168.0.90 \
--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=NumCPU \
--ignore-preflight-errors=Mem
-
拿生成的語句在各個節點執行
-
每個節點將kubelet設定為服務:
systemctl enable kubelet
- 主節點安裝flannel
kubectl apply -f https://gitee.com/mirrors/flannel/raw/master/Documentation/kube-flannel.yml
此時可以執行
kubectl get pods -n kube-system
檢視各個元件的狀態需要等一會,dns和flannel才會ready
全部ready後此時可以重啟主節點試一試,應該重啟後也沒有問題
4. 安裝其他輔助元件
- 主節點安裝kubectl自動補全並自動啟用
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
- 主節點安裝kubectx&kubens
需要git
git clone https://gitee.com/joyko/kubectx /opt/kubectx
ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
ln -s /opt/kubectx/kubens /usr/local/bin/kubens
- 主節點安裝helm3
wget https://get.helm.sh/helm-v3.7.0-linux-amd64.tar.gz
tar -xzvf helm-v3.7.0-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin
rm -rf linux-amd64 helm-v3.7.0-linux-amd64.tar.gz
- 主節點安裝docker-registry
docker run -d --restart always \
--name docker_registry -p 5000:5000 \
-v `pwd`/images:/var/lib/registry \
registry:2
每個節點修改/etc/docker/daemon.json
,新增如下一條
{
"exec-opts":["native.cgroupdriver=systemd"],
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"insecure-registries": ["master:5000"]
}
修改完後重啟docker
systemctl daemon-reload
systemctl restart docker
試驗一下,推送一個映象,在其他節點上能否下載
# 與上面配置的insecure-registries要一致
docker tag XXXX master:5000/XXX
docker push master:5000/XXX
# 在其他節點
docker pull master:5000/XXX
如何刪除上傳到docker_registry中的映象?
- 刪除`pwd`/images/docker/registry/v2/repositories/需要刪除的映象
- 執行垃圾回收api:
docker exec docker_registry bin/registry garbage-collect /etc/docker/registry/config.yml
- 重啟容器docker_registry