使用 Kubeadm 搭建个公网 k8s 集群(单控制平面集群)

前言

YY:国庆的时候趁着阿里云和腾讯云的轻量级服务器做促销一不小心剁了个手😎😢,2 Cores,4G RAM 还是阔以的,既然买了,那不能不用呀🚩,之前一直想着搭建个 k8s 集群玩玩,本地开发机虽然起了个 k8s(拿 Docker Desktop 起的,不 dei 劲),但就一个 Node,不爽,对 k8s 的体验不到位😒,1024,是时候用起来了,折腾一下,顺便让最近浮躁的心冷静一下。

这次拿官方的 Kubeadm 耍一下,以阿里云的轻量级应用服务器为 Control 节点,腾讯云的轻量级应用服务器为 Worker 节点,说干就干。

Check 一下文档要求 - 准备工作

Kubenetes 官方文档给出了 Kubeadm 起 k8s 集群的几点要求,在这里微微检查下两台轻量级云服务器:

  • A compatible Linux host. The Kubernetes project provides generic instructions for Linux distributions based on Debian and Red Hat, and those distributions without a package manager.[我们用的 Ubuntu 20.04,那肯定符合 Debian 系的].
  • 2 GB or more of RAM per machine (any less will leave little room for your apps).[4G, 我们很 OK, 但感觉后面会拉跨].
  • 2 CPUs or more. [正好一台 2个 CPU, nice].
  • Full network connectivity between all machines in the cluster (public or private network is fine).[两台轻量级应用服务器都有公网 IP,那必须互通啊].
  • Unique hostname, MAC address, and product_uuid for every node.[这里得微微 check 一下两台服务器,cat /sys/class/net/eth0/address 看下 MAC 地址,sudo cat /sys/class/dmi/id/product_uuid 看下 product_uuid, hostname 看下主机名,emmm, correct!]
  • Certain ports are open on your machines. [这里得到阿里云轻量级服务器 & 腾讯云的轻量级应用服务器的防火墙开放下相关 TCP 端口]。

阿里云轻量级应用服务器开启 Control(控制平面)节点的 TCP 端口,这里要对照下文档给出的需要开放的端口:

Control Plane Open Ports

Aliyun Control Node

腾讯云轻量级应用服务器开启 Worker(工作)节点的 TCP 端口:

Worker Node Open Ports

Tencent Cloud Worker Node

  • Swap disabled. You MUST disable swap in order for the kubelet to work properly. [为了让 kubelet 起来,要把 Swap 分区关闭,使用 free -mh 看下 Swap 是否在使用, swapoff -a 关闭 Swap 分区].

参考:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

为什么需要关闭 Swap 分区,有 dalao 做了分析:https://www.jianshu.com/p/6f3268ce642f

  • Letting iptables see bridged traffic.

这里照着文档,一波操作下两台服务器:

sudo modprobe br_netfiltercat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOFcat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --systemlsmod | grep br_netfilter
  • Container Runtime Interface(CRI). [这里需要安装下 Pod 运行需要的容器运行时,我们选择 Docker].
apt-get update
apt-get install -y apt-transport-https \software-properties-common \ca-certificates \curl \gnupg \lsb-release
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io

安装完毕还需要将 Docker 的 cgroup driver 替换为 systemd,确保与 Kubeneters 使用的一致。

cat>>/etc/docker/daemon.json<<EOF
{"exec-opts": ["native.cgroupdriver=systemd"]
}
EOFsystemctl daemon-reload
systemctl restart docker

安装 kubeadm, kubelet, kubectl

上面检查工作如果很顺利的话,接下来就可以准备 kubeadm, kubelet, kubectl 安装了,不过我们还得给 apt 添加 Kubenetest 软件源,官方文档中使用的如软件源是 Google 域名下的,国内云服务器访问会有问题(懂得都懂了😂),这里使用国内得源,这里两台服务器都操作一下:

# 1、添加 GPG Key
sudo curl -fsSL http://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
# 2、添加 k8s 软件源
sudo add-apt-repository "deb http://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main"
3、update 一下
apt-get update

上面执行没有问题的话,就可以开始安装 kubelet kubeadm kubectl了:

sudo apt-get install -y kubelet kubeadm kubectl# 查看安装的版本, apt install apt-show-versions
apt-show-versions kubectl kubelet kubeadm
# 让 kubelet 开机启动
sudo systemctl start kubelet
sudo systemctl enable kubelet
  • kubeadm: 引导启动 Kubernate 集群的命令行工具。
  • kubelet: 在群集中的所有计算机上运行的组件, 并用来执行如启动 Pods 和 Containers 等操作。
  • kubectl: 用于操作运行中的集群的命令行工具。

初始化集群

为了能够让集群初始化更快,我们可以先预拉取集群初始化依赖的镜像,emmm,官方文档给出的又是 Google 的网址,这里我们基于 GitHub -> AliyunContainerService/k8s-for-docker-desktop 项目做镜像的快速拉取。确保相关镜像版本与 kubelet 保持一致(这里是 v1.22.2), kubeadm config images list --kubernetes-version v1.22.2 可查看需要哪些镜像。

git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop.git && cd k8s-for-docker-desktoprm -f images.properties
# 调整镜像版本
cat>>images.properties<<EOF
k8s.gcr.io/pause:3.5=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5
k8s.gcr.io/kube-controller-manager:v1.22.2=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.22.2
k8s.gcr.io/kube-scheduler:v1.22.2=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.22.2
k8s.gcr.io/kube-proxy:v1.22.2=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.22.2
k8s.gcr.io/kube-apiserver:v1.22.2=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.22.2
k8s.gcr.io/etcd:3.5.0-0=registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4=registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.4
quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1=registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1
EOF
# 拉取镜像
./load_images.sh

初始化控制平面节点(Control Plane Node(s))

控制(Control)节点 {阿里云轻量级应用服务器} 的镜像预拉取完毕后,可执行如下命令进行初始化操作:

# api server IPv4 地址使用公网 IP
kubeadm init \--pod-network-cidr=10.244.0.0/16 \--kubernetes-version v1.22.2# --apiserver-advertise-address 120.79.73.159

为当前 root 用户生成 kubeconfig:

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

安装 CNI(Container Network Interface) -> Flannel

curl --insecure -sfL https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml | kubectl apply -f -

查看节点状况,emmm,Ready 没毛病

root@iZwz92a65mqaa8zwy83dpnZ:~/k8s-for-docker-desktop# kubectl get nodes
NAME                      STATUS   ROLES                  AGE    VERSION
izwz92a65mqaa8zwy8   Ready    control-plane,master   4m6s   v1.22.2

添加工作节点(Worker Node(s))

接下来我们将 Worker 节点加入到集群中,由于我们在初始化控制平面所在的主节点时并没有指定公网 IP,所以这里先做个 IP 转发,让 Worker 节点能够和控制平面节点间进行通信。

iptables -t nat -A OUTPUT -d <初始化控制平面节点得到的 IP> -j DNAT --to-destination <阿里云轻量级服务器公网 IP>

然后我们将 Worker 节点 join 进集群中:

kubeadm join <初始化控制平面节点得到的 IP>:6443 --token 4zicbp.d1wertghxdgcgz6y --discovery-token-ca-cert-hash sha256:1912dbf415da652f97b9fa728cb85dd338e17b24ee338ec48b073c8fa8sdfgth

顺利的话😊,那么结果如下:

worker join

然后到控制节点看下集群节点状态,顺利的话结果如下🤣:

root@iZwz92a65mqdpnZ:~/k8s-for-docker-desktop# kubectl get nodes
NAME                      STATUS   ROLES                  AGE    VERSION
izwz92a65mqaa8zwy83dpnz   Ready    control-plane,master   48m    v1.22.2
vm-8-4-ubuntu             Ready    <none>                 8m9s   v1.22.2

参考

  • Installing kubeadm
  • 使用 Kubeadm 部署
  • 解决阿里云ECS下kubeadm部署k8s无法指定公网IP

    本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/7937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Git】Git学习-14:VSCode中使用git

学习视频链接&#xff1a;【GeekHour】一小时Git教程_哔哩哔哩_bilibili​编辑https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 在vscode中打开文件 code . 自行修改内容&#xff0c;在源代码管理器中测试下

百度大模型文心一言api 请求错误码 一览表

错误码说明 千帆大模型平台API包含两类&#xff0c;分别为大模型能力API和大模型平台管控API&#xff0c;具体细分如下&#xff1a; 大模型能力API 对话Chat续写Completions向量Embeddings图像Images 大模型平台管控API 模型管理Prompt工程服务管理模型精调数据管理TPM&RP…

卷价格不如卷工艺降本增效狠抓模块规范化设计

俗话说&#xff0c;“卷价格不如卷工艺”&#xff0c;这意味着在追求成本控制和效率提升的过程中&#xff0c;蓝鹏的领导认为蓝鹏应该更注重工艺的优化和创新&#xff0c;而不仅仅是价格的竞争。而模块规范化设计正是实现这一目标的有效途径。 模块规范化设计可以提高生产效率…

小红书高级电商运营课,从0开始做小红书电商(18节课)

详情介绍 课程内容&#xff1a; 第1节课:学习流程以及后续实操流程注意事项,mp4 第2节课:小红书店铺类型解析以及开店细节.mp4 第3节课:小红书电商运营两种玩法之多品店铺解析,mp4 第4节课:小红书电商运营两种玩法之单品店铺解析,mp4 第5节课:选品课(多品类类目推荐).mp4 …

如何获得一个Oracle 23ai数据库(RPM安装)

准确的说&#xff0c;是Oracle 23ai Free Developer版&#xff0c;因为企业版目前只在云上&#xff08;OCI和Azure&#xff09;和ECC上提供。 方法包括3种&#xff0c;本文介绍第2种&#xff1a; Virtual ApplianceRPM安装Docker RPM安装支持Linux 8和Linux 9。由于官方的Vi…

Study--Oracle-02-单实例部署Oracle19C

一、CentOS 7 环境准备 1、软件准备 操作系统&#xff1a;CentOS 7 数据库版本: Oracle19C 2、操作系统环境配置 关闭selinux &#xff0c;编辑 /etc/selinux/config文件&#xff0c;设置SELINUX enforcing 为SELINUXdisabled [rootoracle ~]# grep SELINUX /etc/seli…

基于AbstractRoutingDataSource的mybatis动态多数据源切换

1.pom mybatis-starter版本只能选2开头的版本&#xff0c;选3开头的就报错 <!--druid连接池--> <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.3</version> …

0基础学汽车 丝滑炫酷摄影教学,手机剪映特效剪辑(66节也就是)

详情介绍 0基础学汽车丝滑炫酷摄影教学,手机剪映特效剪辑 课程内容:0基础学汽车 丝滑炫酷摄影教学,手机剪映特效剪辑(66节也就是) - 百创网-源码交易平台_网站源码_商城源码_小程序源码 01 AE课前基础知识(必看).mp4 02 怎样制作德关一样丝滑的作品第二种方法(苹果mac专…

【busybox记录】【shell指令】paste

目录 内容来源&#xff1a; 【GUN】【paste】指令介绍 【busybox】【paste】指令介绍 【linux】【paste】指令介绍 使用示例&#xff1a; 合并文件的行 - 默认输出&#xff08;默认是行合并&#xff09; 合并文件的行 - 一个文件占一行 合并文件的行 - 使用指定的间隔符…

Python Web框架Django项目开发实战:多用户内容发布系统

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:Python项目开发Django实战-多用户内容发布系统-编程案例解析实例详解课程教程.pdf 一、引言 在Web应用开发中,内容发布系统是一个常见的需求。这类系…

5000A信号发生器使用方法

背景 gnss工作需要使用的5000A&#xff0c;所以做成文档&#xff0c;用于其他员工学习。 下载星历数据 https://cddis.nasa.gov/archive/gnss/data/daily/2024/brdc/ 修改daily中的年份&#xff0c;就可以获取相关截至时间的星历数据 brcd数据格式 第一行记录了卫星的PRN号&a…

yolo-world:”目标检测届大模型“

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

科技早报 | 微软将推出自研AI大模型;苹果折叠屏iPhone新专利获批 | 最新快讯

微软将推出自研AI大模型 5月6日消息&#xff0c;据The Information报道&#xff0c;微软正在公司内部训练一个新的人工智能模型&#xff0c;规模足以与谷歌、Anthropic&#xff0c;乃至OpenAI 自身的先进大模型相抗衡。 报道称&#xff0c;这个新模型内部代号为“MAI-1”&…

【AcWing】800. 数组元素的目标和

原题链接&#xff1a;活动 - AcWing 目录 1. 题目描述 输入格式 输出格式 数据范围 输入样例&#xff1a; 输出样例&#xff1a; 2. 思路分析 3. 代码实现 1. 题目描述 给定两个升序排序的有序数组 A 和 B&#xff0c;以及一个目标值 x。 数组下标从 0 开始。 请你…

2024牛客五一集训派对day1 C. Gifted Composer 【二分Hash、循环节】

C. Gifted Composer 传送门 题意 一个字符串初始为空&#xff0c;每次操作可以在其开头或末尾添加一个字符&#xff0c;对每次操作后的字符串&#xff0c;询问有多少个不同的循环节长度&#xff1f; 思路 首先&#xff0c;对于循环节的判断&#xff0c;我们可以用哈希&…

深度学习实战76-基于目标检测YOLOv5模型的迁移学习使用方法,YOLOv5的原理与结构

大家好,我是微学AI,今天给大家介绍一下深度学习实战76-基于目标检测YOLOv5模型的迁移学习使用方法,YOLOv5的原理与结构。YOLOv5(You Only Look Once version 5)是一种先进的目标检测算法,基于深度学习的单阶段目标检测模型。它的主要原理是通过一次前向传播就同时预测图像…

Redis是什么? 日常运维 Redis 需要注意什么 ? 怎么降低Redis 内存使用 节省内存?

你的项目或许已经使用 Redis 很长时间了&#xff0c;但在使用过程中&#xff0c;你可能还会或多或少地遇到以下问题&#xff1a; 我的 Redis 内存为什么增长这么快&#xff1f;为什么我的 Redis 操作延迟变大了&#xff1f;如何降低 Redis 故障发生的频率&#xff1f;日常运维…

c++ priority_queue用法

1 priority_queue的定义 基本定义方法&#xff1a; 基本定义默认是使用大顶堆的&#xff0c;即队首总是最大的元素 priority_queue<int> q;//储存int型数据 priority_queue<double> q;//储存double型数据 priority_queue<string> q;//储存string型数据 …

英语学习笔记1——Excuse me!

Excuse me! 对不起&#xff01; 词汇 Vocabulary excuse v. 原谅 [iks’kju:z] 用法&#xff1a;1. Excuse me! 对不起&#xff01; 用于以下场景&#xff1a; 向陌生人问路 牢记引起别人注意中途离开某个场所。发出怪声&#xff08;如打喷嚏之后&#xff09; 和 I’m sorr…

详解AI作画算法原理

AI作画算法的原理通常涉及深度学习和计算机视觉技术。下面是一个简要的解释&#xff1a; 数据准备&#xff1a;首先&#xff0c;需要准备大量的绘画数据&#xff0c;包括各种风格和类型的绘画作品。这些数据通常由艺术家的作品组成&#xff0c;可以包括油画、水彩画、素描等。 …