1. 程式人生 > 其它 >虛擬機器centos安裝k8s 1.22

虛擬機器centos安裝k8s 1.22

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使用者
  1. 設定靜態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連線訪問了,無需使用虛擬機器自帶的視窗

  1. 安裝常用軟體
yum install -y nano wget git tree
  1. 配置系統
# 關閉防火牆
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
  1. 聯網對時
yum install ntpdate -y
ntpdate ntp1.aliyun.com
  1. 設定橋接引數
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
  1. 修改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
  1. 安裝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

  1. 主節點初始化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
  1. 拿生成的語句在各個節點執行

  2. 每個節點將kubelet設定為服務:

systemctl enable kubelet
  1. 主節點安裝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. 安裝其他輔助元件

  1. 主節點安裝kubectl自動補全並自動啟用
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
  1. 主節點安裝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
  1. 主節點安裝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
  1. 主節點安裝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中的映象?

  1. 刪除`pwd`/images/docker/registry/v2/repositories/需要刪除的映象
  2. 執行垃圾回收api:docker exec docker_registry bin/registry garbage-collect /etc/docker/registry/config.yml
  3. 重啟容器docker_registry