提示:自己搭K8S有多痛苦懂的都懂,所以文中提到的各种版本号,尽量保证一致。
1.配置主机名
master 控制节点
hostnamectl set-hostname k8s-master
工作节点
hostnamectl set-hostname k8s-node01
2.IP配置 (针对本地自己搭建的虚拟机,云服务不要改动,跳过)
master控制节点和node工作节点都要配。
ifconfig看下内网ip。还要注意自己的网卡名啊,比如我下面这个就是ens33。
然后配置netplan,配置文件目录就是/etc/netplan/,具体文件名有可能不太一样,敲 00 tab一下。
vi /etc/netplan/00-installer-config.yaml
找网卡ens33。别配错地方了。addresses填本机的内网ip。路由网段也配成自己的。via:192.168.x.x
保存退出,让配置生效。
netplan apply
同上,每个节点都这样配置一遍。
3.主机名IP地址解析
vi /etc/hosts
填写之前配好的主机名,和对应的内网地址。每个节点都要这么把集群内所有节点的主机名IP配上。
保存退出
4.配置K8S内核转发 网桥
每个节点主机都要搞。
创建内核文件
cat << EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
加载
modprobe overlay
modprobe br_netfilter
验证
lsmod | egrep overlay
lsmod | egrep overlay
lsmod | egrep br_netfilter
网桥过滤 内核转发配置
cat << EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
加载
sysctl --system
5.安装ipset ipvsadm
所有节点主机都要装
apt install ipset ipvsadm
配置ipvsadm 添加模块
cat << EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
创建加载模块脚本
cat << EOF | tee ipvs.sh
#!/bin/sh
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
执行脚本
sh ipvs.sh
验证
lsmod | grep ip_vs
6.关闭SWAP分区
所有节点主机都要关闭
先看是否开启了swap分区
free -m
如果开启则关闭
swapoff -a
设置永久关闭
vi /etc/fstab
注释掉最下面这行
保存退出
7.容器运行时Containerd安装部署
所有节点主机都要装
解压到根目录
tar xf cri-containerd-1.7.11-linux-amd64.tar.gz -C /
生成配置文件
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
修改
vi /etc/containerd/config.toml
65行 sandbox_image,国外服务器只需要把 "pause:3.8" 改成 "pause:3.9",国内改成 "registry.aliyuncs.com/google_containers/pause:3.9"。
137行 SystemdCgroup,false改成true。
启动
systemctl enable --now containerd
验证
containerd --version
8.K8S部署
以下所有节点都要做
如果是国外的主机 走官方库 按照下面这么install
下载k8s软件包仓库公共签名密钥
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmour -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
添加仓库
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新
apt-get update
开始安装
apt-get install -y kubelet=1.29.0-1.1 kubeadm=1.29.0-1.1 kubectl=1.29.0-1.1
关闭自动更新
apt-mark hold kubelet kubeadm kubectl
如果是国内的主机 无梯 这么install
apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/deb/Release.key |
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.29/deb/ /" |
tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
关闭自动更新
apt-mark hold kubelet kubeadm kubectl
然后操作主节点master节点 下面这一堆都是操作master节点!!
先生成kubeadm配置文件
kubeadm config print init-defaults > kubeadm-config.yaml
修改配置文件
nodeRegistration:name 这个是注册k8s节点时候的名字可改可不改
**advertiseAddress **换成自己的内网ip
**imageRepository **根据情况换 registry.aliyuncs.com/google_containers
networking加上 podSubnet:10.244.0.0/16 (看图中红框部分)
最后换kubelet内核驱动 末尾加上 (图中红框)
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd
kubeadm初始化
kubeadm init --config kubeadm-config.yaml
成功如下图 Your Kubernetes control-plane has initialized successfully!
注意蓝框中的部分,需要根据篮筐中的提示生成kubectl配置文件
执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
图中最下面
kubeadm join 192.168.0.241:6443 --token abcdef.0123456789abcdef
--discovery-token-ca-cert-hash sha256:abbd129b388861f1b33d5c11e70bc1fc12ba73b9d48eb7ab759ae90fd16cbd20
这段就是集群添加worker node的命令,这是临时的。
到非master节点去执行,加入到集群中。
到master节点执行
kubectl get nodes
如下图,代表加入成功。
9.Calico部署
操作在主节点上 master
如果服务器有梯或者在国外 直接拉
官网Quickstart for Calico on Kubernetes | Calico Documentation (tigera.io)https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart#install-calico
Install Calico
注意官网的这个命令是最新的,我们这个用的是3.26.4版本。建议版本不要超过3.27
执行
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/tigera-operator.yaml
如果是国内服务器无梯 那就先把yaml文件down下来 就是url输入到浏览器 右键另存为
down下来再扔服务器上 (你down文件这步不确定是不是须要魔法 0.0,我知道你很烦,没招啊)
然后执行
kubectl create -f tigera-operator.yaml
下一步执行第二个
这步先下载文件
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/custom-resources.yaml
然后修改
改成 10.244.0.0/16
改完保存执行
kubectl create -f custom-resources.yaml
然后查看网络创建过程
watch kubectl get pods -n calico-system -o wide
所有pod都是running状态,ready状态,就是组网成功了。
这里强调一下,如果calico-node都不是1/1 ready状态,都是0/1,那么肯定是你原生网络环境有问题。我在这步就掉坑里了,calico BGP模式组网,node间通讯要走TCP,179端口,还有各种烂七八糟的端口,都要能通的。云服务搭建的同学一定要注意这点,先把安全组配好。
TCP:179 5473 6666 6443 2379 2380
**UDP:4789 **
但还是建议按范围开端口,这些端口是有可能变化的。
如果大多数是1/1,一部分或者某个calico-node是0/1,那么大概率就是网卡错误。先看pod日志,如果看到“Readiness probe failed: calico/node is not ready: BIRD is not ready”,那基本就是网卡不对,节点的ip获取不到。那么就看下你正在使用的网卡是啥,本文是tigera-operator搭建calico,那就修改tigera-operator.yaml。指定网卡,或者正则匹配网卡。我当前使用的网卡是eht0,那就指定为eth0。如下图。
修改custom-resources.yaml文件,spec.calicoNetwork下加上。
nodeAddressAutodetectionV4:
interface: eth0
然后重拉一遍
kubectl apply -f custom-resources.yaml
10.Kuboard可视化工具部署
可视化web ui有不少,kuboard是我用着最顺手的。
安装 Kuboard v3 - kubernetes | Kuboardhttps://kuboard.cn/install/v3/install-in-k8s.html#%E5%AE%89%E8%A3%85把这个文件wget down下来
wget https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
修改几个地方
注释掉KUBOARD_SERVER_NODE_PORT: '30080'
加上KUBOARD_ENDPOINT: 'http://192.168.0.241:30080'
192.168.0.241 换成你集群随便一个节点的内网IP
#KUBOARD_SERVER_NODE_PORT: '30080'
KUBOARD_ENDPOINT: 'http://192.168.0.241:30080'
128行 镜像拉取策略改成 IfNotPresent
221行也是
都改好了,保存退出,执行。
kubectl apply -f kuboard-v3-swr.yaml
然后执行
watch kubectl get pods -n kuboard
这样就是成功了
浏览器访问 http://IP:30080
如果你是云服务搭建的同学,那IP就是你集群随便一个节点的公网IP地址哈。
公网Kuboard还要注意,如果你的master节点服务器80端口不通(有的云服务厂商需要备案才能开80),那么http://MASTER-NODE-IP:30080很有可能打不开, 可以尝试别的节点的IP看看好不好使,一般来说,work节点IP就能打开了,Kuboard Agent会自己内部跳转。
打开如下图
初始账户密码 admin Kuboard123
公网同学赶紧改密码啊!!!登录进去在用户这里能改。
然后就是导入集群信息
点添加集群
选择KubeConfig
然后把你之前生成的 .kube文件夹下的config里的内容直接粘里,集群名称和描述,自己填好,最后确定。
最后,祝大家搭建顺利,k8s使用快乐,不出问题。(〃'▽'〃)
版权归原作者 TheRulingPower 所有, 如有侵权,请联系我们删除。