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
相关推荐
虎头金猫1 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS1 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
codeejun1 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
赵文宇(温玉)1 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher
guo_wen_qiang1 天前
上传本地镜像到harbor中
docker·容器·持续部署
张洛闻Eren1 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
忆~遂愿2 天前
本地片库怎么在外面打开?Plex + cpolar 搭一套可远程访问的私人影音库
docker·容器
Thneonl2 天前
你的 Pod 为什么 Pending:调度器两阶段
后端·kubernetes
不吃香菜kkk、2 天前
CI/CD(GitOps)学习与部署手册
运维·云原生·容器·kubernetes·云计算·jenkins·argocd
ChaITSimpleLove2 天前
云原生性能对决:JDK21虚拟线程+GraalVM vs .NET10/11 技术栈深度对比
微服务·云原生·serverless·graalvm native·native aot·runtime async·.net11/java21