K8S 云集群安装纯享版 - 傻瓜式一键教程 全自动脚本文件

news2024/12/28 3:39:17

引言:
用的云服务器,整个过程读者还是需要准备些软妹币的…
另外众所周知,K8S最难的部分是什么?——是安装。。。

目录

  • 0. 技术选型( :bell: 重要!)
    • 0.0 version
    • 0.1 云服务器
  • 1. 容器运行时
  • 2. k8s 安装前准备
    • 2.0 网络连接
    • 2.1 hostname
    • 2.2 其他配置
  • 3 安装 k8s
    • 3.0 kubeadm
      • pod-network-cidr
    • 3.1 calico
      • pod-network-cidr
  • 4. 成功

0. 技术选型( 🔔 重要!)

0.0 version

组件version
docker-ce19.03.8
docker-ce-cli19.03.8
container.io1.3.9
kubelet1.20.9
kubeadm1.20.9
kubectl1.20.9
calicov3.20.6

0.1 云服务器

规格:

  • 一台 master 2core 4G
  • 两台 slave 4core 8G

操作系统发行版:

  • CentOS 7.8

网络:

(注意本教程所选的 vpc 网段不是 192.168.xx.xx)

ecshostnameprivate IP
mastercluster-endpoint172.31.0.2
slave0cluster-slave0172.31.0.3
slave1cluster-slave1172.31.0.4

1. 容器运行时

我们选择 docker 。

随便选个空目录,新建脚本文件 docker.sh。内容如下:

#!/bin/bash

# ============================== 先安装 ==================================
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息 用阿里云的 不然慢死
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE,指定版本
sudo yum makecache fast
sudo yum -y install docker-ce-19.03.8 docker-ce-cli-19.8 container.io-1.3.9 
# Step 4: 开启Docker服务
sudo systemctl enable docker --now

# ====================== 再改配置 ======================================
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "registry-mirrors": ["https://xxxxxxxxx.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

# 使上述配置生效
systemctl daemon-reload
systemctl restart docker

建好后,

# 添加可执行权限
chmod +x docker-install.sh
# 然后执行
./install-docker.sh

解释说明:

上面脚本文件的第二部分“===再安装===”是为了创建 /etc/docker/daemon.json 配置文件。

“registry-mirror” 是在配阿里云 mirror 加速器(由于一些科学上网相关的原因)(不知道怎么找自己加速器地址的可自行百度)。
“exec-opts” 是在修改控制组 cgroup driver 为 systemd。

2. k8s 安装前准备

请参考 https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 的 《Before you begin》

2.0 网络连接

请你确保3台服务器加入同一vpc, 网段为 172.31.0.0/16 ,设置内网网络互信

(这里有个小坑,后面讲)

2.1 hostname

设 hostname 用命令 hostnamectl set-hostname xxx. 按照上面 1.0 章节的表设置。

2.2 其他配置

注意 ⚠ :
把 “你的master内网IP” 处改为自己的IP。

#!/bin/bash

# 域名解析
echo "你的master内网ip cluster-enpoint" >> /etc/hosts

# 暂时关防火墙
systemctl stop firewalld
# 然后永久关
systemctl disable firewalld

# 暂时禁用交换分区
sudo swapoff -a
# 永久禁用交换分区. 不同发行版这个配置文件位置可能不同,可根据自己情况修改
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 允许 iptables 检查桥接流量。(把一些 ipv6 的流量桥接到 ipv4 方便统计)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
# 设置 bridge
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
EOF

# 让上面配置生效
sudo sysctl --system

# 暂时关selinux
sudo setenforce 0
# 永久关selinux
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

加权限,执行。日志大概长这样:

没有报错就是执行成功!

3 安装 k8s

k8s 集群的主流安装方式有三种,我们选用最常见的 kubeadm 方式。

  • minikube 单机版的本地 kube
  • 二进制安装
  • kubeadm 等安装工具

3.0 kubeadm

这是一个引导安装工具。有点像 windows 里我们的安装向导程序 xx-setup.exexx-setup.msi


下面我们执行下面这个脚本文件 kubeadm.sh

注意,

注意 ⚠ :
把 “你的master内网IP” 处改为自己的 IP。
在 slave 节点上请去掉分割线后的部分!

#!/bin/bash

# 添加阿里的 yum 源服务器
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

yum clean all && yum makecache

# 开始下载!!
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
# 安好了 查看版本
kubeadm version
# kubelet 开机自启
systemctl enable kubelet --now

# ======================= slave 节点不需要下面 ====================

# 害怕init master 卡住,于是提前下 images 的一段脚本。master 需要以下这些组件。这里我用了b站尚硅谷教程里的 image-repository,感谢尚硅谷啊
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF

chmod +x ./images.sh && ./images.sh

# 初始化 master 节点. 这里我用了b站尚硅谷教程里的 image-repository
kubeadm init \
--apiserver-advertise-address=你的master内网IP \
--control-plane-endpoint=cluster-master \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16

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

pod-network-cidr

如果你的云服务器 vpc 没用我推荐的网段,,大部分人估计是 192.168.xx.xx,那会和上面 init master 的 pod-network-cidr 冲突。

如果你是这种情况,复制脚本文件时改下这个字段,改成任意一个避开你自己 vpc 的网段即可,比如改成 ‘172.31.0.0/16’…

详情参见 https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network

Take care that your Pod network must not overlap with any of the host networks: you are likely to see problems if there is any overlap. (If you find a collision between your network plugin’s preferred Pod network and some of your host networks, you should think of a suitable CIDR block to use instead, then use that during kubeadm init with --pod-network-cidr and as a replacement in your network plugin’s YAML).

成功:

image.png

如果你为了保护钱包没按开头规定买服务器,选了低规格的云服务器,就会出现这个。。

image.png

# 如果你是 root 用户,成功后执行下这个
export KUBECONFIG=/etc/kubernetes/admin.conf

3.1 calico

选一个 pod network 插件下载。这里我们选 calico。

按照官网的版本匹配关系,我们该安指定版本v3.20.6。可能阿里云觉得它比较小众,所以阿里云加速器里存的 calico 并不全。想 pull 指定 tag 是走不了加速器的,最终还是会去 dockerHub pull。除非运气爆棚,否则就是失败,失败,再失败。。

“阿里云镜像加速器” 的 “镜像” 是指‘mirror’. 实质上是个缓存备份(cache),详情参见 https://docs.docker.com/registry/recipes/mirror/

本教程中我的解决方式是曲线救国。由于我的 windows 笔记本是有 VPN 的,可以从 calico 的 github 飞速地下载 image 们的 tar 包们。Release v3.20.6 · projectcalico/calico (github.com)。下完传到云服务器上。然后加载(docker load) tar 包形成 image。

release-v3.20.6.tgz同目录新建 calico.sh

# !/bin/bash

# 解压
tar -zxvf release-v3.20.6.tgz

cd release-v3.20.6
cd images

# 循环加载 image
sudo tee load-images.sh <<-'EOF'
#!/bin/bash
tars=(
calico-kube-controllers.tar
calico-node.tar
calico-typha.tar
calico-cni.tar
calico-pod2daemon-flexvol.tar
)
for tar in ${tars[@]} ; do
docker load < $tar
done
EOF

chmod +x load-images.sh && ./load-images.sh

# 替换 docker.io 前缀
cp ../k8s-manifests/calico.yaml ../k8s-manifests/calico.cp.yaml
sed -i 's/image: docker.io\//image: /g' calico.yaml

# 如果你的 VPC 网段和 pod-network 不冲突,那么可以解开下面注释
# kubectl apply -f ../k8s-manifests/calico.yaml

说明 ✒:
原本 calico.yaml 中所规定的 image 资源都是长这样的 docker.io/calico/cni:v3.20.6, 由于这个 docker.io/ 前缀会导致 k8s 去 DockerHub 上找 image (前面已解释了走不了阿里加速器的原因),而不是使用刚才我们导入进本地的 images。所以我们用 sed -i 来全局查找替换,去掉它们。

pod-network-cidr

关于最后一行脚本——

再一次,如果你的云服务器 vpc 没用我推荐的网段,,,大部分人估计是 192.168.xx.xx,那会和上面 calico 默认的 Ipv4pool_cidr 冲突。

修改 calico.yaml 文件,解注释,改网段:

在这里插入图片描述

🔔 和章节 4.1 中你 init master 用的 pod-network-cidr 的地址保持一致!!

然后可以编排资源了:

kubectl apply -f calico.yaml

4. 成功

# 检查下 k8s 集群的 pod 们
kubectl get pod -A

如果你的哪个 pod 有问题,可以用 describe 排查:

kubectl describe pod [POD_NAME] -n [NAMESPACE]

全都成功的话长这样:

image.png

使用本教程遇到坑的话欢迎留言探讨~

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

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

相关文章

【计算机视觉】CVPR 2023 上的分割论文真的是神仙打架(介绍前12篇,图像分割,全景分割,语义分割,实例分割)

文章目录 一、图像分割类1.1 AutoFocusFormer: Image Segmentation off the Grid1.2 FreeSeg: Unified, Universal and Open-Vocabulary Image Segmentation1.3 Parameter Efficient Local Implicit Image Function Network for Face Segmentation 二、全景分割类2.1 You Only …

CUDA介绍

CUDA introduction 文章目录 CUDA introduction异构计算架构典型的CUDA程序的执行流程函数类型限定词Kernel 线程层次结构线程ID号计算&#xff1a; Example加法实例托管内存乘法 性能分析工具 Nsight System功能用法 Reference欢迎关注公众号【三戒纪元】 异构计算架构 GPU并…

SIFT算法简介

参考资料 SIFT文献-David-UBC&#xff1a; 《Distinctive Image Features from Scale-Invariant Keypoints》SIFT算法介绍&#xff1a; SIFT特征详解 - Brook_icv - 博客园 (cnblogs.com) 简介 Scale-invariant feature transform 尺度不变特征变换 SIFT算法不仅只有尺度不…

腾讯安全杨光夫:企业需改变“头痛医头”现状,构建持续进化的安全免疫力

6月13日&#xff0c;腾讯安全联合IDC发布“数字安全免疫力”模型框架&#xff0c;主张将守护企业数据和数字业务两大资产作为企业安全建设的核心目标。腾讯安全副总裁杨光夫在《助力企业持续进化安全免疫力》的主题演讲中表示&#xff0c;在新业态、新威胁、新场景、强监管下&a…

【MySQL】MVCC是如何解决快照读下的幻读问题的

文章目录 LBCC当前读 MVCC隐藏列undo logRead View 总结 我们从上文中了解到InnoDB默认的事务隔离级别是repeatable read&#xff08;后文中用简称RR&#xff09;&#xff0c;它为了解决该隔离级别下的幻读的并发问题&#xff0c;提出了LBCC和MVCC两种方案。其中LBCC解决的是当…

StarRocks 统一 OLAP 引擎在滴滴的探索实践

作者&#xff1a;余辉&#xff0c;滴滴出行 OLAP 团队负责人/专家工程师&#xff1b;李明皇&#xff0c;滴滴出行高级软件开发工程师 发展历程 滴滴的 OLAP 系统早期由用于实时监控系统的 Apache Druid &#xff08;以下简称 Druid&#xff09;和离线加速使用的 Apache Kylin&a…

随风摇曳的她——美蕨(matlab实现)

目录 1 随风摇曳的她 2 摇曳带来的哲思 3 Matlab代码实现 1 随风摇曳的她 梦幻的场景、浪漫的气息&#xff0c;带上心爱的人&#xff0c;拥抱在这片花海之下&#xff0c;便有了电影男女主角的氛围感&#xff1b; 就算阅尽了世间风貌&#xff0c;也抵不上和她在一起时锦短情长&a…

Idea批量删除空行

1.在编辑框中使用快捷键ctrl f 打开替换框 2.勾选正则模式 Regex 3.在条件框中输入正则^\s*\n 正则解释&#xff0c;匹配以0个或n个\s空白符起首的换行\n 输入正则后可以看到效果&#xff0c;可以看到单行和多行都被选中了 。 如果想只删除连续多行的空行&#xff0c;就需要…

fl studio for window 21.0.3.3517 官方中文版免费下载及新功能介绍

FL Studio 21 for Mac官方中文版免费下载是一款功能强大的音乐编曲制作软件。尽管你可能没有接触过音乐制作&#xff0c;也能通过fl Studio 21&#xff0c;撰写&#xff0c;整理&#xff0c;录制&#xff0c;编辑&#xff0c;混合&#xff0c;掌握和制作出专业的品质音乐。 fl…

每隔一段时间重试,重试n次 java 工具类

需求&#xff1a; 若代码出现异常&#xff0c;则每隔一段时间重试一下&#xff0c;重试n次 import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.util.function.Supplier;public class RetryUtils {private static final Logger log LoggerFactory.getLogg…

ASP.NET Core 依赖注入系列一

什么是ASP.NET Core 依赖注入? 依赖注入也称DI是一项技术用来实现对象松耦合以至于应用程序更容易维护&#xff0c;ASP.NET Core通过控制器的构造函数自动注入依赖的对象&#xff0c;我们创建ASP.NET Core MVC应用程序演示依赖注入特性是如何工作, 在这节中我们讲解该特性 1 …

剑指offer45 把数组排成最小的数

剑指offer45 把数组排成最小的数 文章目录 剑指offer45 把数组排成最小的数题目描述思路实现参考文献 题目描述 输入一个非负整数数组&#xff0c;把数组里的所有数字拼接起来排成一个数&#xff0c;打印能拼接出来的所有数字中最小的一个。 思路 此题求拼接起来的最小数字&…

Selenium教程__使用switch_to.window方法处理窗口切换(12)

想一下这样的场景&#xff0c;打开页面A点击一个链接&#xff0c;在一个新的窗口打开页面B&#xff0c;由于之前的driver实例对象在页面A&#xff0c;但是你接下来操作的元素在页面B中&#xff0c;此时脚本就会报错找不到元素。该场景需要使用到selenium的switch_to.window&…

CMake 编译并链接动态库

问题描述 目录结构如下&#xff1a; |---CMP|---mmath|---mmath.h|---mmath.cpp|---CMakeLists.txt|---CMP.cpp|---CMakeLists.txt需要把mmath子项目编译成动态链接库并被CMP.cpp调用 代码如下&#xff1a; //mmath.h namespace mmath { int __declspec(dllexport) add(int…

Python基础(20)——Python函数讲解二

Python基础&#xff08;20&#xff09;——Python函数讲解二 文章目录 Python基础&#xff08;20&#xff09;——Python函数讲解二目标一. 变量作用域二. 多函数程序执行流程三. 函数的返回值四. 函数的参数4.1 位置参数4.2 关键字参数4.3 缺省参数4.4 不定长参数 五. 拆包和交…

pytest和ValueError: Expect x to not have duplicates(个人笔记)

1.项目在新环境报错为没有pytest 解决办法&#xff1a; 在设置里面的Tools里面的某个选项改为&#xff08;如下图&#xff09; 2.同一个项目在旧电脑正常运行&#xff0c;到了新电脑新环境莫名报错 报错为 interpolate.interp1d里面的某个函数报错 具体报错为&#xff1a;Valu…

Bean属性校验

Servlet是一个规范&#xff0c;Tomcat实现的 JDBC是一个规范&#xff0c;各个厂商实现的 JSR303也是一个规范&#xff0c;有人提供实现 我们只需要面向接口编程即可。 一般来说&#xff0c;以javax开头的groupId&#xff0c;都是规范 JSR303提供规范&#xff0c;其余框架实现规…

软考A计划-系统集成项目管理工程师-信息化系统的生命周期-下

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

Mysql数据库操作总结

文章目录 1. DDL(Data Definition Language - 数据定义语言)1.1 数据库1.2 数据表(创建查询删除)1.3 数据表(修改) 2. 数据类型2.1 数值2.2 字符2.3 日期 3. 字段约束3.1 约束3.2 主键约束修改3.3 主键自增 联合主键 4. DML(Data Manipulation Language - 数据操作语言)4.1 添…

本地搭建svn仓库 + 调试svn hooks

本地搭建SVN仓库 调试svn hooks : 文章目录 本地搭建SVN仓库 调试svn hooks :1. 环境准备&#xff1a;2. 搭建本地仓库的过程&#xff1a;3. 将写好的svn hooks pre-commit.bat放到hooks目录内。4. 创建仓库的本地working copy: 1. 环境准备&#xff1a; 需要安装TortoiseSV…