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
EOF

sysctl --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
EOF

mv 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"]
}
EOF

mv daemon.json /etc/docker/

# 重启生效
systemctl daemon-reload
systemctl restart docker
10.所有节点开放端口

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

注意最后一个是UDP端口

协议 方向 端口范围 目的
TCP 入站 6443 Kubernetes API server
TCP 入站 2379-2380 etcd server client API
TCP 入站 10250 Kubelet API
TCP 入站 10259 kube-scheduler
TCP 入站 10257 kube-controller-manager
UDP 入站 8472 Overlay 也就是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_IP
  valueFrom:
    fieldRef:
      fieldPath: status.podIP

对应部分整体如下

      containers:
      - name: kube-flannel
        image: docker.io/flannel/flannel:v0.25.4
        command:
        - /opt/bin/flanneld
        args:
        - --public-ip=$(PUBLIC_IP)
        - --iface=eth0
        - --ip-masq
        - --kube-subnet-mgr
        resources:
          requests:
            cpu: "100m"
            memory: "50Mi"
        securityContext:
          privileged: false
          capabilities:
            add: ["NET_ADMIN", "NET_RAW"]
        env:
        - name: PUBLIC_IP
          valueFrom:
            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
上一篇:Web 安全:OWASP TOP10 漏洞介绍


下一篇:Python 生成Md文件带超链 和 PDF文件 带分页显示内容-software.pdf