提示:自己搭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
如果服务器有梯或者在国外 直接拉
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里的内容直接粘里,集群名称和描述,自己填好,最后确定。
发表评论