kubeadm 方式 安装k8s

412 阅读3分钟

一、 安装前准备

1. 初始化系统环境

ubuntu系统环境初始化 :网络 network 、域名 hostname、ssh登录、内核优化等等

2. 安装容器引擎 containerd

apt update                      //更新软件包
apt install containerd -y       //下载软件包

mkdir /etc/containerd/        //存放containerd的配置文件
containerd config default > /etc/containerd/config.toml   //导入默认配置,文件名是固定的

vim /etc/containerd/config.toml
//修改pause镜像地址,此处使用阿里镜像地址
    sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9" 
//修改镜像加速配置
169      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
170      endpoint = ["https://ryici85m.mirror.aliyuncs.com"]
//ubuntu2204版本要修改为true
137             SystemdCgroup =  true   

systemctl restart containerd.service
systemctl status containerd.service

3. 安装crictl工具

root@node2:~/apps# mkdir /root/apps/
root@node2:~/apps# cd /root/apps/    //上传软件包
root@node2:~/apps# ls
crictl-v1.29.0-linux-amd64.tar.gz
root@node2:~/apps# mkdir /usr/local/bin/crictl
root@node2:~/apps# tar xvf crictl-v1.29.0-linux-amd64.tar.gz -C /usr/local/bin/crictl
crictl

root@node2:~/apps# vim /etc/profile
  export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/bin/crictl
//在最后一行插入

root@node2:~/apps# source /etc/profile  //执行脚本
root@node2:~/apps# crictl -v            //查看版本
crictl version v1.29.0

root@node2:~/apps# cat > /etc/crictl.yaml <<EOF
runtime-endpoint: "unix:///run/containerd/containerd.sock"
image-endpoint: "unix:///run/containerd/containerd.sock"
timeout: 10
debug: false
EOF

4. 安装nerdctl工具

root@node2:~/apps# cd /root/apps/    //上传nerdctl软件包
root@node2:~/apps# ls  
crictl-v1.29.0-linux-amd64.tar.gz  nerdctl-1.7.6-linux-amd64.tar.gz
root@node2:~/apps# tar xvf nerdctl-1.7.6-linux-amd64.tar.gz -C /usr/local/bin/
root@node2:~/apps# nerdctl version

root@node2:~/apps# mkdir /etc/nerdctl   
root@node2:~/apps# cat > /etc/nerdctl/nerdctl.toml <<EOF  //配置(官方发布的固定配置)
namespace = "k8s.io"
debug = false
debug_full = false
insecure_registry = true
EOF
nerdctl.png

5. 安装CNI工具

root@node2:~/apps# ls
crictl-v1.29.0-linux-amd64.tar.gz cni-plugins-linux-amd64-v1.5.1.tgz   nerdctl-1.7.6-linux-amd64.tar.gz
root@node2:~/apps# mkdir /opt/cni/bin/ -p
root@node2:~/apps# tar xvf cni-plugins-linux-amd64-v1.5.1.tgz -C /opt/cni/bin/

6. 拉取镜像进行测试

//上传nginx镜像
root@node2:~/apps# ls   
nerdctl-1.7.6-linux-amd64.tar.gz  cni-plugins-linux-amd64-v1.5.1.tgz   nginx.tar.gz crictl-v1.29.0-linux-amd64.tar.gz
//加载镜像
root@node2:~/apps# nerdctl load -i /root/apps/nginx.tar.gz  
//运行容器
root@node2:~/apps# nerdctl run -it -p 8000:80 --rm  --name=nginx_test harbor.hiuiu.com/basic_image/centos7_filebeat_nginx:2408.u
//验证容器是否运行
root@node2:~/apps# nerdctl ps
CONTAINER ID    IMAGE                                                         COMMAND        CREATED           STATUS    PORTS                   NAMES
9a355b4b33e4    harbor.hiuiu.com/basic_image/centos7_filebeat_nginx:2408.u    "/bin/bash"    21 seconds ago    Up        0.0.0.0:8000->80/tcp    nginx_test

7. 初始化K8S环境

  1. 安装基本的软件
apt install chrony ipvsadm tree ipset -y
  1. 关闭防火墙和关闭selinux
ufw disable
ufw status
或者
systemctl stop ufw
systemctl status firewalld
  1. 关闭swap 交换分区
//临时关闭
swapoff -a

//永久关闭
sed -i '/swap.img/s/^/#/' /etc/fstab
  1. 配置时间服务器
sed -i 's/pool ntp.ubuntu.com/pool ntp.ntsc.ac.cn/' /etc/chrony/chrony.conf
systemctl restart chronyd
systemctl status chronyd
  1. 加载模块
modprobe br_netfilter && lsmod | grep br_netfilter
modprobe ip_conntrack && lsmod | grep conntrack

cat >/etc/modules-load.d/modules.conf<<EOF
ip_vs
ip_vs_lc
ip_vs_lblc
ip_vs_lblcr
ip_vs_rr
ip_vs_wrr
ip_vs_sh
ip_vs_dh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
ip_tables
ip_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
xt_set
br_netfilter
nf_conntrack
overlay
EOF

systemctl restart systemd-modules-load.service
lsmod | grep -e ip_vs -e nf_conntrack
  1. 修改内核参数
vim  /etc/sysctl.conf

net.ipv4.ip_forward=1
vm.max_map_count=262144
kernel.pid_max=4194303
fs.file-max=1000000
net.ipv4.tcp_max_tw_buckets=6000
net.netfilter.nf_conntrack_max=2097152
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0

sysctl -p
  1. 修改hosts文件
vim /etc/hosts
192.168.204.110 m.kk.com
192.168.204.120 n1.kk.com
192.168.204.130 n2.kk.com
  1. 修改machin-id (克隆机器的需要修改)
cat /etc/machine-id  //查看machin-id

rm -f /etc/machine-id
systemd-machine-id-setup

二、 正式安装 K8S-kubeadm 方式

1. 配置说明

//域名		IP地址	         配置		角色			
m.kk.com 	  192.168.204.110	 4c4G		master
n1.kk.com	  192.168.204.120	 4c4G		node1
n2.kk.com	  192.168.204.130	 4c4G		node2

2. 安装 kubeadm 、kubelet、 kubectl

apt update
apt install apt-transport-https ca-certificates curl gpg -y
	
mkdir -p -m 755 /etc/apt/keyrings
//默认官方地址
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg   
//阿里源
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/ /" |  tee /etc/apt/sources.list.d/kubernetes.list
	
//安装命令
apt-get update && apt-cache madison kubeadm
apt-get install -y kubelet=1.30.3-1.1 kubeadm=1.30.3-1.1 kubectl=1.30.3-1.1

3. 拉取镜像

//上传 images_download.sh 脚本
bash images_download.sh  //执行脚本
nerdctl images           //查看镜像

4. 创建MASTER

root@m:~# systemctl restart kubelet.service
root@m:~# ufw disable
root@m:~# swapoff -a

kubeadm init --apiserver-advertise-address=192.168.204.110 --apiserver-bind-port=6443 --kubernetes-version=v1.30.3 --pod-network-cidr=10.200.0.0/16 --service-cidr=10.96.0.0/16 --service-dns-domain=cluster.local --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers  --ignore-preflight-errors=swap

`按照提示执行:`
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

export KUBECONFIG=/etc/kubernetes/admin.conf
source /etc/profile

5. 节点加入集群

kubeadm join 192.168.204.110:6443 --token gh3nxw.6u4ttn0limx9yz9y \
        --discovery-token-ca-cert-hash sha256:9d8505f7aa3e3217e2530856eb5ede76f213dea019034d2c0900b07addf1fa52  

6. 查看集群节点

kubectl get nodes