K8S v1.23.6公网集群安装部署

K8S v1.23.6公网集群安装部署

基本环境

centOS-7.9 最少2台 - 一主(master)一从(node)
   docker - v20.10.24

端口开放说明

在这里插入图片描述

安装步骤

docker安装(所有节点都需要)

卸载当前版本docker & 安装指定版本docker(如果版本大于20.10.24 则需替换docker)

# 卸载docker
yum remove -y docker
yum remove -y docker-ce
yum remove docker-common docker-selinux docker-engine

# 下载docker-ce的yum源
sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 重新安装新版本docker
yum install docker-ce-20.10.24-3.el7

# 启动docker
systemctl start docker

# 开机自动启动docker
systemctl enable docker

#### docker driver 修改成systemd  ####

# 修改配置
vim /etc/docker/daemon.json

# 添加配置项
"exec-opts": ["native.cgroupdriver=systemd"]

# 保存
:x

# 重启docker
systemctl daemon-reload
systemctl restart docker

master节点执行操作
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld


# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时


# 关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久


# 关闭swap后,一定要重启机器!
# 根据规划设置主机名
hostnamectl set-hostname <hostname>


# 在master添加hosts 根据实际机器ip地址
##### 注意这里的ip 根据自己的服务器公网ip自行做替换
cat >> /etc/hosts << EOF
111.56.11.11 k8s-master1
122.54.12.12 k8s-node1
EOF


# 将桥接的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 # 生效


# 时间同步
yum install ntpdate -y
ntpdate time.windows.com


# 添加阿里云 kubernetes 源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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


# 安装kubeadm、kubelet、kubectl
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6 
# 开机自动启动
systemctl enable kubelet


# 看一下你的公网IP是否在机器中存在
ip a | grep 111.56.11.11
# 如果没有就执行下面这段代码新增一个和公网IP一样的虚拟网卡IP(master node都要配置)
cat > /etc/sysconfig/network-scripts/ifcfg-eth0:1 << EOF
BOOTPROTO=static
DEVICE=eth0:1
IPADDR=111.56.11.11
PREFIX=32
TYPE=Ethernet
USERCTL=no
ONBOOT=yes
EOF


# 初始化kubeadm
systemctl restart network


# 修改 kubelet 启动参数
#添加 kubelet 的启动参数--node-ip=公网IP, 每个主机都要添加并指定对应的公网 ip, 添加了这一步才能使用公网 ip 来注册进集群
sudo vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --node-ip=111.56.11.11


# 初始化
kubeadm init \
    --apiserver-advertise-address=111.56.11.11 \
    --control-plane-endpoint=111.56.11.11 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version=1.23.6 \
    --pod-network-cidr=10.244.0.0/16


# 如果出现报错就执行这个 然后再重新执行初始化
echo 1 > /proc/sys/net/ipv4/ip_forward


## 初始化日志出现init 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

## 在 master 节点
kube-apiserver 添加--bind-address和修改--advertise-addres
sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml

在这里插入图片描述

安装 flannel 网络
# 下载 flannel 的 yaml 配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

vi kube-flannel.yml

name: kube-flannel
image: ...    
args:
 - --public-ip=$(PUBLIC_IP)
 - --iface=eth0

env:
 - name: PUBLIC_IP
   valueFrom:
     fieldRef:
       fieldPath: status.podIP

net-conf.json: |
  {
    "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
  }
  
# 找到这些关键字修改保存即可

# 修改完成之后
    kubectl apply -f kube-flannel.yml

# 执行如下命令,等待一会儿,直到所有的容器组处于 Running 状态
watch -n 1 kubectl get pod -n kube-system -o wide

# 等待所有需要加入的节点加入成功后,在 master 节点执行下面命令,并等待所有节点状态变为 Ready (笔者搭建的一主两从的集群,均使用的公网 ip)
kubectl get nodes
node节点执行操作
## 执行下列操作前先安装上述步骤的docker
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld


# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时


# 关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久


# 关闭swap后,一定要重启机器!
# 根据规划设置主机名
hostnamectl set-hostname <hostname>


# 将桥接的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 # 生效


# 时间同步
yum install ntpdate -y
ntpdate time.windows.com


# 看一下你的公网IP是否在机器中存在
ip a | grep <你的node节点的公网ip>


# 添加阿里云 kubernetes 源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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


# 安装kubeadm、kubelet、kubectl
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6 
# 开机自动启动
systemctl enable kubelet


# 看一下你的公网IP是否在机器中存在
ip a | grep <你的node节点的公网ip>
# 如果没有就执行下面这段代码新增一个和公网IP一样的虚拟网卡IP(master node都要配置)
cat > /etc/sysconfig/network-scripts/ifcfg-eth0:1 << EOF
BOOTPROTO=static
DEVICE=eth0:1
IPADDR=122.54.12.12
PREFIX=32
TYPE=Ethernet
USERCTL=no
ONBOOT=yes
EOF


# 初始化kubeadm
systemctl restart network


# 修改 kubelet 启动参数
#添加 kubelet 的启动参数--node-ip=公网IP, 每个主机都要添加并指定对应的公网 ip, 添加了这一步才能使用公网 ip 来注册进集群
sudo vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --node-ip=<你的node节点的公网ip>


# 此时切换到master节点 输入以下指令查看加入集群指令
kubeadm token create --print-join-command

## 如果在输入join的时候报错 可以输入以下指令 然后再重新输入加入的指令
echo 1 > /proc/sys/net/ipv4/ip_forward

如何在node节点也可以使用kubectl指令?

# 先在master节点上执行 将master节点上admin.conf文件同步到node上
scp /etc/kubernetes/admin.conf root@k8s-node1:/etc/kubernetes
输入目标机器密码..
scp /etc/kubernetes/admin.conf root@k8s-node2:/etc/kubernetes
输入目标机器密码..

# 然后切换到node机器上看看文件是否存在 如果存在就执行一下指令
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source ~/.bash_profile

# 然后查看node机器上使用kubectl是否生效
kubectl get nodes

测试是否互通

# 生成deployment
kubectl create deployment nginx --image=nginx --replicas=3

# 生成service
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看服务对应端口
kubectl get svc

curl xxx.xx.xx.xx:xxxxx
节点与节点之间无法 ping 通?
如果发现节点和节点 pod和pod之间无法ping通的话 需要查看所有节点的udp端口是否正常开放 云服务器放开8472 UDP端口即可

解决pod与pod之间无法通信

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KubernetesK8s)是一个用于自动化容器部署、扩展和管理的开源平台。在K8s的不同版本中,v1.23.6是较新的版本。下面是关于如何进行K8s v1.23.6的二进制部署的简要步骤。 1. 准备服务器:首先需要准备一台或多台服务器,最好是基于Linux操作系统的服务器。确保服务器可通过SSH远程访问,并且具有足够的计算和存储资源来运行Kubernetes集群。 2. 安装Docker:Kubernetes使用Docker作为容器运行时环境。在服务器上安装Docker,并确保其正确配置和运行。 3. 下载Kubernetes二进制文件:在官方Kubernetes GitHub页面上,找到v1.23.6的版本发布并下载相关的二进制文件。 4. 配置Master节点:选择其中一台服务器作为Master节点,并在此节点上进行Kubernetes的初始化配置。通过执行"kubeadm init"命令,可以完成对Master节点的初始化。 5. 配置Worker节点:选择剩余的服务器作为Worker节点,并通过执行"kubeadm join"命令,将这些节点加入到Kubernetes集群中。 6. 安装网络插件:Kubernetes集群需要一个网络插件来实现容器间的网络通信。根据自己的需求,选择并安装合适的网络插件,如Calico、Flannel等。 7. 部署Dashboard(可选):Dashboard提供了一个Web界面来管理和监控Kubernetes集群。根据需求,可以选择安装并配置Dashboard。 通过以上步骤,可以成功完成Kubernetes v1.23.6的二进制部署。注意,这只是一个简要的步骤概述,具体的部署过程可能会因环境和需求而有所不同。在进行部署之前,建议仔细阅读文档和相关教程,以确保正确理解和执行每个步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值