您的位置:首页 > 科技 > 能源 > k8s公网集群安装(1.23.0)

k8s公网集群安装(1.23.0)

2024/12/23 9:14:13 来源:https://blog.csdn.net/weimeibuqieryu/article/details/140138034  浏览:    关键词:k8s公网集群安装(1.23.0)
网上搜到的公网搭建k8s都不太一致, 要么说的太复杂, 要么镜像无法下载, 所以写了一个简洁版,小白也能一次搭建成功
使用的都是centos7,k8s版本为1.23.0 使用二台机器搭建的, 三台也是一样的思路
1.所有节点分别设置对应主机名
hostnamectl set-hostname master
hostnamectl set-hostname node1
2.所有节点都修改 hosts
vim /etc/hosts
# 外网设置对应地址
1.12.245.xxx node1
139.159.140.xxx master
3.所有节点关闭 SELinux
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
4.所有节点将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOFsysctl --system  
5.所有节点时间同步
yum install ntpdate -y
ntpdate time.windows.com
6.所有节点配置一个虚拟网卡
vim /etc/profile#公网地址
sudo ifconfig eth0:1 1.12.245.xxx up
7.所有节点添加安装源

yum默认下载慢, 使用aliyun Yum源repo文件

#Centos-7, 我使用的是centos7 就是7 
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

更新缓存

yum clean all 
yum makecache
# 添加 k8s 安装源
cat <<EOF > kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOFmv kubernetes.repo /etc/yum.repos.d/# 添加 Docker 安装源
# 先安装yum-config-manager
yum -y install yum-utils 
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
8.所有节点安装所需组件

使用的是1.23版本

yum install -y kubelet-1.23.0-00 kubectl-1.23.0-00 kubeadm-1.23.0-00 docker-ce

并设置开机自启

systemctl enable kubelet
systemctl start kubelet
systemctl enable docker
systemctl start docker
9.所有节点修改 docker 配置
# kubernetes 官方推荐 docker 等使用 systemd 作为 cgroupdriver,否则 kubelet 启动不了
# 镜像源可以使用https://docker.1panel.live 来加速cat <<EOF > daemon.json
{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://docker.1panel.live"]
}
EOFmv daemon.json /etc/docker/# 重启生效
systemctl daemon-reload
systemctl restart docker
10.所有节点开放端口

其实有些端口node节点不用的, 但是还是都打开, 免得因为端口不通通信失败

注意最后一个是UDP端口

协议方向端口范围目的
TCP入站6443Kubernetes API server
TCP入站2379-2380etcd server client API
TCP入站10250Kubelet API
TCP入站10259kube-scheduler
TCP入站10257kube-controller-manager
UDP入站8472Overlay 也就是Flannel通信端口
11.所有节点修改启动参数

先找这个配置在哪里, 不同版本存放目录可能不一样

find / -name 10-kubeadm.conf/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

然后添加在ExecStart最后添加--node-ip=<公网IP>

vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

image-20240702161449649

12.主节点 master 用 kubeadm 初始化集群

需要替换为你自己机器的公网ip 139.159.140.xxx

sudo kubeadm init \
--apiserver-advertise-address=139.159.140.xxx \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.0 \
--control-plane-endpoint=139.159.140.xxx \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
--v=5

初始化成功后会给出提示,执行以下操作让Master主机上所有用户可以使用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 139.159.140.xxx:6443 --token bhywug.i7bj42ecbuvxxx --discovery-token-ca-cert-hash sha256:50b856221954fe4183e2a9a7ba29679bdfd316b526ccfee144f6xxx

如果过期了可以重新获取:

kubeadm token create --print-join-command 
13.修改主节点 master 的kube-apiserver 参数
vim /etc/kubernetes/manifests/kube-apiserver.yaml

command下添加 , 标注 的ip也要核对是否正确

- --bind-address=0.0.0.0

image-20240702174945305

14.node节点加入

使用上述提到的命令

kubeadm join 139.159.140.xxx:6443 --token bhywug.i7bj42ecbuxxx --discovery-token-ca-cert-hash sha256:50b856221954fe4183e2a9a7ba29679bdfd316b526ccfee144f6d13bc3xxx 
15.将master节点配置信息同步到node节点

一般在$HOME/.kube 或者 ~/.kube/config 下,将config 文件复制到子节点对应目录就行了

16.master 节点安装CNI网络插件

使用flannel, 在master节点执行

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

修改args添加之前配置的网卡

vim kube-flannel.yml- --public-ip=$(PUBLIC_IP)
- --iface=eth0

并添加

env:
- name: PUBLIC_IPvalueFrom:fieldRef:fieldPath: status.podIP

对应部分整体如下

      containers:- name: kube-flannelimage: docker.io/flannel/flannel:v0.25.4command:- /opt/bin/flanneldargs:- --public-ip=$(PUBLIC_IP)- --iface=eth0- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN", "NET_RAW"]env:- name: PUBLIC_IPvalueFrom:fieldRef:fieldPath: status.podIP

image-20240702215929219

然后运行

kubectl apply -f kube-flannel.yml
17.检查状态
kubectl get node

显示ready, 如果不是, 检查需要开放的端口是否开放, CNI网络插件pod是否运行正常

image-20240702180926260

kubectl get pod -n kube-system -o wide

image-20240702215644524

18.让master主节点调用pod

因为主节点存在不可调度污点, 查看命令

kubectl describe node master

image-20240702221233832

让master能运行pod

kubectl taint nodes master node-role.kubernetes.io/master-
#或者所有节点
kubectl taint nodes --all node-role.kubernetes.io/master-

恢复污点

kubectl taint nodes master node-role.kubernetes.io/master=:NoSchedule
19.给node节点打上role标识
kubectl label node node1 node-role.kubernetes.io/worker=worker

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com