实验环境
master1节点内存不能小于4G
一、环境准备
1、配置主机名
本次使用3台主机完成kubernetes集群部署,其中1台为master节点,名称为master1;其中2台为worker节点,名称分别为:worker1及worker2
hostnamectl set-hostname xxx
2、配置主机名与IP地址解析(master1)
vim /etc/hosts
添加:
192.168.10.20 master1
192.168.10.21 worker1
192.168.10.22 worker2
scp -rp /etc/hosts root@192.168.10.21:/etc/hosts
scp -rp /etc/hosts root@192.168.10.22:/etc/hosts
3、修改时区(master1、worker1、worker2)
timedatectl set-timezone Asia/Shanghai
timedatectl
4、配置内核路由转发和网桥过滤(master1、worker1、worker2)
vim /etc/sysctl.d/k8s.conf
添加:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
加载内核参数
sysctl --system
加载模块
vim /etc/modules-load.d/k8s.conf
添加:
overlay
br_netfilter
chmod +x /etc/modules-load.d/k8s.conf
modprobe overlay
modprobe br_netfilter
查看是否加载
lsmod | grep "overlay"
lsmod | grep "br_netfilter"
5、安装ipset和ipvsadm(master1、worker1、worker2)
apt -y install ipset ipvsadm
配置ipvsadm模块加载方式,添加需要加载的模块
cat > /etc/modules-load.d/ipvs.conf <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
授权、运行、检查是否加载
6、关闭swap交换分区(master1、worker1、worker2)
临时关闭
swapoff -a
永久关闭
vim /etc/fstab
二、准备Containerd(master1、worker1、worker2)
1、下载Containerd或上传cri-containerd-1.7.5-linux-amd64.tar.gz包到/root目录
下载地址(需连接VPN):wget https://github.com/containerd/containerd/releases/download/v1.7.5/cri-containerd-1.7.5-linux-amd64.tar.gz
解压
tar xf cri-containerd-1.7.5-linux-amd64.tar.gz -C /
2、生成Containerd配置文件并修改
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
vim /etc/containerd/config.toml
修改:
修改pause镜像的下载地址为阿里云仓库
registry.aliyuncs.com/google_containers/pause:3.9
启用Cgroup用于下载进程的资源使用,入CPU、内存
为Containerd配置镜像加速器
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://docker.1ms.run"]
3、启动Containerd并开机自启
systemctl enable --now containerd
查看Containerd的版本信息
containerd --version
或 ctr version
三、K8S集群部署
1、创建kubernetes yum源(master1、worker1、worker2)
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
报错如下,因为没有公钥
将公钥添加至服务器
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B53DC80D13EDEF05
apt-get update
2、安装k8s集群所需组件(master1、worker1、worker2)
查看软件列表
apt-cache madison kubeadm
安装指定版本
apt -y install kubeadm=1.28.2-00 kubelet=1.28.2-00 kubectl=1.28.2-00
锁定软件版本
apt-mark hold kubelet kubeadm kubectl
3、k8s集群初始化(master1)
kubeadm version
kubeadm config print init-defaults > kubeadm-config.yaml
vim kubeadm-config.yaml
修改添加:
查看集群所需的镜像
kubeadm config images list --kubernetes-version=v1.28.2
上传k8s-1.28.2.tar包到/root目录并导入镜像(master1、worker1、worker2)
ctr -n k8s.io images import k8s-1.28.2.tar
查看导入的镜像(master1、worker1、worker2)
ctr -n k8s.io images list
或
ctr -n k8s.io images list -q
初始化集群(master1)
kubeadm init --config kubeadm-config.yaml
4、准备kubectl配置文件(master1)
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
5、将工作节点加入集群
worker1:
kubeadm join 192.168.10.20:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:aa12edf00286a52ce3b5eb5cf08b4e3dfd2c73da54a0195e71c0b5ad317cf146
worker2:
kubeadm join 192.168.10.20:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:aa12edf00286a52ce3b5eb5cf08b4e3dfd2c73da54a0195e71c0b5ad317cf146
四、部署集群网络插件calico
1、创建operator资源清单文件(master1)
上传tigera-operator.yaml包到/root目录
kubectl create -f tigera-operator.yaml
2、通过自定义资源方式安装(master1)
上传custom-resources.yaml包到/root目录
修改custom-resources.yaml,修改为使用kubeadm init ----pod-network-cidr对应的IP地址段
vim custom-resources.yaml
修改:
3、应用资源清单文件
上传calico_v3.25.1.tar、calico-apiserver.tar、calico-typha.tar包到/root目录并导入镜像(master1、worker1、worker2)
ctr -n k8s.io images import calico-typha.tar
ctr -n k8s.io images import calico-apiserver.tar
ctr -n k8s.io images import calico_v3.25.1.tar
创建calico资源(master1)
kubectl create -f custom-resources.yaml
watch kubectl get pods -n calico-system
已经全部运行后,ctrl+c结束监控即可
四、验证集群可用性(master1)
查看kubernetes所有节点
kubectl get nodes
禁用VIM自动缩进功能
vim /root/.vimrc
添加:
set noautoindent
set nocindent
set nosmartindent
创建YAML文件
vim nginx.yaml
添加:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginxweb
spec:
selector:
matchLabels:
app: nginxweb1
replicas: 2
template:
metadata:
labels:
app: nginxweb1
spec:
containers:
- name: nginxwebc
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginxweb-service
spec:
externalTrafficPolicy: Cluster
selector:
app: nginxweb1
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
type: NodePort
创建资源
kubectl apply -f nginx.yaml
kubectl get svc
使用浏览器访问192.168.10.20:30080