使用 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;在源代码管理器中测试下

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

俗话说&#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; 合并文件的行 - 一个文件占一行 合并文件的行 - 使用指定的间隔符…

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应用开发流程概…

深度学习实战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;日常运维…

大数据与会计专业主要学什么课程

大数据与会计专业是一个结合了传统会计知识与现代大数据技术的交叉学科&#xff0c;旨在培养既懂会计又熟悉大数据分析的复合型人才。该专业的学生将会学习以下主要课程内容&#xff1a; 会计基础课程&#xff1a;包括基础会计、财务会计、成本会计、管理会计等&#xff0c;这些…

有了这么多套件,为什么还需要APaaS

文/明道云创始人任向晖 在明道云的业务活动中&#xff0c;比较常见的一个问题是和套件应用的关系。一个有具体应用需求的客户为什么不从市场上购买现成的套件应用&#xff0c;而要选择APaaS来构建呢&#xff1f;反过来说似乎也成立&#xff0c;既然一个平台什么应用都能搭建&a…

使用双指针解决问题题集(二)

1. 有效三角形的个数 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 示例 1: 输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 示例 2: 输入: nums [4,2,3,4] 输出: 4 题解&a…

软件系统测试方案书(测试计划-Word原件)

2 引言 2.1 编写目的 2.3 测试人员 2.4 项目背景 2.5 测试目标 2.6 简写和缩略词 2.7 参考资料 2.8 测试提交文档 2.9 测试进度 3 测试环境 3.1 软硬件环境 4 测试工具 5 测试策略 5.1 测试阶段划分及内容 5.1.1 集成测试 5.1.2 系统测试 5.1.2.1 功能测试 5.…

深入解析智能指针:从实践到原理

&#x1f466;个人主页&#xff1a;晚风相伴 &#x1f440;如果觉得内容对你有所帮助的话&#xff0c;还请一键三连&#xff08;点赞、关注、收藏&#xff09;哦 如果内容有错或者不足的话&#xff0c;还望你能指出。 目录 智能指针的引入 内存泄漏 RAII 智能指针的使用及原…

STM32F10x移植FreeRTOS

一、获取FreeRTOS源码 &#xff08;1&#xff09;登录FreeRTOS官网&#xff1a;www.freertos.org&#xff0c;下载第一个压缩包 &#xff08;2&#xff09;通过GitHub网站&#xff1a;github.com/FreeRTOS/FreeRTOS下载&#xff0c;由于该网站服务器在国外&#xff0c;所以访问…

1688快速获取整店铺列表 采集接口php Python

在电子商务的浪潮中&#xff0c;1688平台作为中国领先的批发交易平台&#xff0c;为广大商家提供了一个展示和销售商品的广阔舞台&#xff1b;然而&#xff0c;要在众多店铺中脱颖而出&#xff0c;快速获取商品列表并进行有效营销是关键。 竞争对手分析 价格比较&#xff1a;…

【强训笔记】day12

NO.1 思路&#xff1a;哈希表&#xff0c;建立bool数组&#xff0c;将要删除的字符串存入哈希表&#xff0c;并标为true&#xff0c;再遍历要做处理的字符串&#xff0c;如果在哈希表中为false&#xff0c;就输出。 代码实现&#xff1a; #include <iostream> #includ…