k8s公网集群安装(1.23.0)

网上搜到的公网搭建k8s都不太一致, 要么说的太复杂, 要么镜像无法下载, 所以写了一个简洁版,小白也能一次搭建成功
使用的都是centos7,k8s版本为1.23.0 使用二台机器搭建的, 三台也是一样的思路
1.所有节点分别设置对应主机名
stylus 复制代码
hostnamectl set-hostname master
hostnamectl set-hostname node1
2.所有节点都修改 hosts
stylus 复制代码
vim /etc/hosts
# 外网设置对应地址
1.12.245.xxx node1
139.159.140.xxx master
3.所有节点关闭 SELinux
stylus 复制代码
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
4.所有节点将桥接的IPv4流量传递到iptables的链
shell 复制代码
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.所有节点配置一个虚拟网卡
shell 复制代码
vim /etc/profile

#公网地址
sudo ifconfig eth0:1 1.12.245.xxx up
7.所有节点添加安装源

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

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

更新缓存

stylus 复制代码
yum clean all 
yum makecache
stylus 复制代码
# 添加 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

并设置开机自启

stylus 复制代码
systemctl enable kubelet
systemctl start kubelet
systemctl enable docker
systemctl start docker
9.所有节点修改 docker 配置
stylus 复制代码
# 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节点不用的, 但是还是都打开, 免得因为端口不通通信失败

协议 方向 端口范围 目的
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
TCP 入站 8472 Overlay 也就是Flannel通信端口
11.所有节点修改启动参数

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

stylus 复制代码
find / -name 10-kubeadm.conf

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

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

stylus 复制代码
vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
12.主节点 master 用 kubeadm 初始化集群

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

stylus 复制代码
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命令

stylus 复制代码
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

并且还给出了其他节点加入集群的命令:

stylus 复制代码
kubeadm join 139.159.140.xxx:6443 --token bhywug.i7bj42ecbuvxxx 
	--discovery-token-ca-cert-hash sha256:50b856221954fe4183e2a9a7ba29679bdfd316b526ccfee144f6xxx

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

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

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

stylus 复制代码
- --bind-address=0.0.0.0
14.node节点加入

使用上述提到的命令

stylus 复制代码
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节点执行

stylus 复制代码
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

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

stylus 复制代码
vim kube-flannel.yml

- --public-ip=$(PUBLIC_IP)
- --iface=eth0

并添加

stylus 复制代码
env:
- name: PUBLIC_IP
  valueFrom:
    fieldRef:
      fieldPath: status.podIP

对应部分整体如下

stylus 复制代码
      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

然后运行

stylus 复制代码
kubectl apply -f kube-flannel.yml
17.检查状态
stylus 复制代码
kubectl get node

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

stylus 复制代码
kubectl get pod -n kube-system -o wide
18.让master主节点调用pod

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

stylus 复制代码
kubectl describe node master

让master能运行pod

stylus 复制代码
kubectl taint nodes master node-role.kubernetes.io/master-
#或者所有节点
kubectl taint nodes --all node-role.kubernetes.io/master-

恢复污点

stylus 复制代码
kubectl taint nodes master node-role.kubernetes.io/master=:NoSchedule
相关推荐
lendq2 小时前
k8s-第二节-常用操作
docker·容器·kubernetes
2401_857439694 小时前
自动发现的艺术:Eureka服务注册与发现深度解析
云原生·eureka
小宏运维有点菜8 小时前
docker
运维·docker·容器
孤城2868 小时前
08 docker Registry搭建docker私仓
运维·docker·容器·devops
明明跟你说过8 小时前
无服务器【Serverless】架构的深度剖析:组件介绍、优缺点与适用场景
微服务·云原生·容器·架构·serverless·运维开发·无服务器
Cherry Xie10 小时前
k8s常见组件之Kube-apiserver
云原生·容器·kubernetes
宿昔不梳一苦十年寒窗10 小时前
docker 安装 nacos
运维·docker·容器
腾讯数据架构师10 小时前
cube-studio 开源一站式云原生机器学习/深度学习/大模型训练推理平台介绍
机器学习·云原生·开源
2401_8576176211 小时前
【Eureka服务治理深度解析】探索灰度发布的实现之道
云原生·eureka
是乐乐啊呀11 小时前
docker
运维·docker·容器