2、CKA-简单搭建K8s集群

news2024/11/18 1:34:05

基础环境:

主机IP资源系统主机名
192.168.100.1104核8GCentos8K8s-master
192.168.100.1204核8GCentos8K8s-node1
192.168.100.1304核8GCentos8K8s-node2

推荐一个小网站:https://labs.play-with-k8s.com/

其他的废话不多说,直接部署起来先~~

部署(一主多从)
1、修改主机名

# 192.168.100.110
[root@localhost ~]#  hostnamectl set-hostname k8s-master
[root@localhost ~]# exec bash

# 192.168.100.120
[root@localhost ~]#  hostnamectl set-hostname k8s-node1
[root@localhost ~]# exec bash

# 192.168.100.130
[root@localhost ~]#  hostnamectl set-hostname k8s-node2
[root@localhost ~]# exec bash

2、添加本地域名解析

# 追加三条解析
[root@k8s-master ~]# vim /etc/hosts
192.168.100.110 k8s-master
192.168.100.120 k8s-node1
192.168.100.130 k8s-node2

# 为了省时间直接用scp传过去
[root@k8s-master ~]#  scp /etc/hosts root@k8s-node1:/etc/hosts
[root@k8s-master ~]#  scp /etc/hosts root@k8s-node2:/etc/hosts

3、关闭防火墙、selinux和swapoff分区

# Master
[root@k8s-master ~]# systemctl --now disable firewalld
[root@k8s-master ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
[root@k8s-master ~]# setenforce 0
# 临时关闭swap
[root@k8s-master ~]# swapoff -a
# 永久关闭swap(默认用这个即可)
[root@k8s-master ~]# sed -i 's/.swap./#&/' /etc/fstab
[root@k8s-master ~]# mount -a
# 检查一下swap
[root@k8s-master ~]# 

# Master和Node都要关闭防火墙、selinux和swap !!!!!!!!!!!!!!!

为什么要关闭swap分区?
swap是指虚拟内存分区,当物理内存使用完后,会把swap分区的磁盘空间虚拟成内存使用。所以启用swap会对系统性能产生负面影响。

4、添加内核网桥过滤和内核转发功能

# 只需要在Master节点上创建即可
[root@k8s-master ~]# vim /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
[root@k8s-master ~]# modprobe br_netfilter
[root@k8s-master ~]# sysctl -p
[root@k8s-master ~]# sysctl --system
* Applying /usr/lib/sysctl.d/00-system.conf ...
.........省略中间....................
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
* Applying /etc/sysctl.conf ...

5、配置yum源、docker和k8s的repo库
阿里云yum源
阿里云docker-ce源
阿里云Kubernetes源

# 先安装常用命令
[root@k8s-master ~]# yum install curl wget git vim -y

# 配置阿里云yum源
[root@k8s-master yum.repo.d]# mkdir repoback
[root@k8s-master yum.repo.d]# mv *.repo repoback/
[root@k8s-master yum.repo.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
# 配置docker源
[root@k8s-master yum.repo.d]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@k8s-master yum.repo.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@k8s-master yum.repo.d]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# 配置Kubernetes源
[root@k8s-master yum.repo.d]# 
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 检查是否当前yum.repo.d目录是否存在三个repo源
[root@k8s-master yum.repo.d]# ls
CentOS-Base.repo  docker-ce.repo  kubernetes.repo  repoback

# makecache
[root@k8s-master yum.repo.d]#  yum makecache

## Node1和Node2是一样这么配置的,会Ansible的话直接批量操作,我这里不继续写下去了

问题点
在这里插入图片描述

由于我用的是centos7.9系统,装载阿里云的kubernetes源出现了报错,报错原因是因为校验问题,我们将源内容改成如下即可!

解决方案
在这里插入图片描述

5、安装docker-ce和kubelet,kubeadm,kubectl

# podman和docker不建议再同一台机器上,我们直接卸载podman
[root@k8s-master ~]# yum earse podman buildah -y
[root@k8s-master ~]# yum install docker-ce -y --allowerasing
# '--allowerasing'是替换冲突的软件包 '--skip-broken'是跳过无法安装软件包 '--nobest'是不限制只使用最佳选择的软件包
[root@k8s-master ~]# systemctl --now enable docker
# 查看docker版本
[root@k8s-master ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.21
...........省略如下信息.............

# 配置容器加速器及设置cgroup为systemd
# 配置加速器教程:https://zhuanlan.zhihu.com/p/143085714
[root@k8s-master ~]# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://mirror.aliyuncs.com"],    //这个地址在自己的阿里云平台有,我把关键部分移除了
  "exec-opts":["native.cgroupdriver=systemd"]
}
[root@k8s-master ~]#  systemctl restart docker

# 记得Node节点也要安装docker和配置  别忘记了~~~

为什么要设置cgroup为systemd?
因为K8s的自带cgroup管理器为systemd,给每个进程分配cgroup,而docker的cgroup管理器cgroupfs这样同时运行两个cgroup控制器;当资源有压力时,会导致系统出现不稳定的情况。

6、安装k8s

# 查看当前有哪些版本的k8s可以安装
[root@k8s-master ~]# yum list kubelet --showduplicates | sort -r
# 这里咱们选1.22.4-0版本
[root@k8s-master ~]# yum install kubelet-1.22.4-0 kubeadm-1.22.4-0 kubectl-1.22.4-0 -y
[root@k8s-master ~]# systemctl --now enable kubelet.service

# 记得Node节点也要安装和配置  别忘记了~~~

kubelet:运行在cluster所有节点上,负责启动pod和容器
kubeadm: 初始化cluster指令
kubectl:k8s的命令行工具(部署和管理应用,可查看,创建,删除和更新资源)

7、初始化master节点

[root@k8s-master ~]# kubeadm init \
--apiserver-advertise-address=192.168.100.110 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernets-version=v1.22.4 \
--service-cidr=172.16.0.0/16 \
--pod-network-cidr=10.244.0.0/16



# 普通用户使用kubectl 
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
[root@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 若root用户使用kubectl    # master节点一般用这个
[root@k8s-master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
# 查看当前节点
[root@k8s-master ~]# kubectl get node
NAME         STATUS   ROLES                  AGE    VERSION
k8s-master   NotReady    control-plane,master   157m   v1.22.4

1、 master节点的状态为什么是NotReady?
NotReady是未就绪的意思,这个状态是因为网络插件没有配置
2、初始化集群后,默认命令不支持tab键补全
source <(kubectl completion bash)
3、初始化成功后,最后输出密钥有效期是24小时,可以使用如下生成新密钥
kubeadm token list # 查看当前密钥
kubeadm token create --print-join-command # 打印并使用标记加入集群所需要完整的’kubeadm join’标志

问题点:

1、当出现kubectl使用tab键出现cabash: _get_comp_words_by_ref: command not found
CSDN大佬的链接:https://blog.csdn.net/qq_29974229/article/details/102890267

8、部署calico网络插件

[root@k8s-master ~]# wget https://docs.projectcalico.org/manifests/calico.yaml
[root@k8s-master ~]# vim calico.yaml
             #  - name: CALICO_IPV4POOL_CIDR
             #    value: "172.16.0.0/16"
########################################################################################################
# 将如上信息改为
             - name: CALICO_IPV4POOL_CIDR
               value: "172.16.0.0/16"       # 这个IP地址是初始化的这个参数的地址--service-cidr=172.16.0.0/16
             - name: IP_AUTODETECTION_METHOD
               value: "interface=ens.*"
[root@k8s-master ~]# kubectl apply -f calico.yaml

9、然后等待一段时间再次查看Master节点status状态是否已经是Ready状态

[root@k8s-master ~]# kubectl get node
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   23h   v1.22.4
[root@k8s-master ~]# kubectl get pods -n kube-system
NAME                                       READY   STATUS    RESTARTS      AGE
calico-kube-controllers-846d7f49d8-84pp2   1/1     Running   1 (23h ago)   23h
calico-node-7lfcz                          1/1     Running   0             23h
calico-node-hmx9j                          1/1     Running   1 (23h ago)   23h
calico-node-v6vrm                          1/1     Running   1 (23h ago)   23h
coredns-7f6cbbb7b8-c588l                   1/1     Running   1 (23h ago)   23h
coredns-7f6cbbb7b8-dsvc5                   1/1     Running   1 (23h ago)   23h
etcd-k8s-master                            1/1     Running   2 (23h ago)   23h
kube-apiserver-k8s-master                  1/1     Running   2 (23h ago)   23h
kube-controller-manager-k8s-master         1/1     Running   2 (23h ago)   23h
kube-proxy-hwg84                           1/1     Running   1 (23h ago)   23h
kube-proxy-kbzbc                           1/1     Running   1 (23h ago)   23h
kube-proxy-n5gtp                           1/1     Running   1 (23h ago)   23h
kube-scheduler-k8s-master                  1/1     Running   2 (23h ago)   23h

10、Node加入集群

# 由于我是昨天写的博客  所以还是重新生成一下token
[root@k8s-master ~]# kubeadm token create --print-join-command
kubeadm join 192.168.100.20:6443 --token 4f8iwc.oa0m00mto5p8k7vt --discovery-token-ca-cert-hash sha256:d2451f6139da5a0224547b4d3826ce1483ef54807d1e2e1a8838ada278333f21

# 切到Node节点直接运行生成出来的token
[root@k8s-node1 ~]# kubeadm join 192.168.100.20:6443 --token 4f8iwc.oa0m00mto5p8k7vt --discovery-token-ca-cert-hash sha256:d2451f6139da5a0224547b4d3826ce1483ef54807d1e2e1a8838ada278333f21

# 再次到Master节点查看集群状况
[root@k8s-master ~]# kubectl get node
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   23h   v1.22.4
k8s-node1    Ready    <none>                 23h   v1.22.4

# 当看到Master集群的node1加入进来已经是Ready状态就说明没错了

11、测试部署一个应用起来看看

# 这里我就在Master节点部署了
[root@k8s-master ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
[root@k8s-master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
[root@k8s-master ~]# kubectl get service
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   172.16.0.1       <none>        443/TCP        24h
nginx        NodePort    172.16.183.156   <none>        80:32098/TCP   28s

从上面可以看到我们运行了一个nginx应用,集群的地址是172.16.183.156,Port是80;
我们要验证的是外部能访问到这个nginx,所以IP是Master的地址+32098;即192.168.100.20:32098

所以呢,我们成功部署了k8s集群(但是这只适用于测试环境,公司一般最好用二进制方式安装)
在这里插入图片描述

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

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

相关文章

[附源码]Python计算机毕业设计 校园疫情防控系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

校企合作,人才共育|湖南工程学院第二期万应低代码实训营圆满收官

2022年11月11日&#xff0c;湖南工程学院第二期万应低代码实训营圆满收官&#xff0c;来自湖南工程学院计算机与通信学院&#xff08;人工智能产业学院&#xff09;的47位同学经过为期9天、共计51课时的培训课程&#xff0c;用出色的交付成果顺利结业。湖南工程学院计算机与通信…

最简单的git图解(最基本命令)

git clone: 这个命令用于将远程代码仓库克隆到本地&#xff0c;这是对任何项目进行开发前的第一步。 比如你本地本来并没有某个项目的代码仓库&#xff0c;此时随便找一个文件目录并进入cmd命令窗口&#xff0c;执行命令git clone [remote address]&#xff0c;[remote addres…

春节静态HTML网页作业模板 传统节日文化网站设计作品 静态学生网页设计作业简单网页制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

python计算长方形面积 青少年编程电子学会python编程等级考试一级真题解析2022年6月

目录 python计算长方形面积 一、题目要求 1、编程实现 2、输入输出

TCP粘包和拆包

TCP粘包和拆包 &#xff08;1&#xff09;TCP是面向连接的&#xff0c;面向流的&#xff0c;提供可靠性服务。收发两端&#xff08;客户端和服务端&#xff09;都要有一一成对的socket&#xff0c;因此&#xff0c;发送端为了将多个发给接收端的包&#xff0c;更有效的发给对方…

【前端】Vue+Element UI案例:通用后台管理系统-代码总结

文章目录前言项目文件目录apimockServehome.jspermission.jsindex.jsmock.jsuser.jsassertcomponentsCommonAside.vueCommonHeader.vueCommonTags.vuedataechartsDataorder.jsuser.jsvideo.jsmockDatatableData.jsuserData.jsvideoData.jsCountData.jsMenuData.jsTableData.jsT…

389. 找不同(简单不一定知道)

问题描述&#xff1a; 给定两个字符串 s 和 t &#xff0c;它们只包含小写字母。 字符串 t 由字符串 s 随机重排&#xff0c;然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例 &#xff1a; 示例 1&#xff1a; 输入&#xff1a;s "abcd", t …

大学生抗疫逆行者网页作业 感动人物HTML网页代码成品 最美逆行者dreamweaver网页模板 致敬疫情感动人物网页设计制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

多维时序 | MATLAB实现ELM极限学习机多维时序预测(股票价格预测)

多维时序 | MATLAB实现ELM极限学习机多维时序预测(股票价格预测) 目录 多维时序 | MATLAB实现ELM极限学习机多维时序预测(股票价格预测)效果一览基本介绍程序设计结果输出参考资料效果一览 基本介绍

MySQL-僵持锁

前言 一个僵持锁&#xff08;deadlocks&#xff09;是指锁处于僵持的状态&#xff0c;持有锁的事务既得不到期望的资源&#xff0c;也不愿意释放其他事务需要的资源&#xff0c;也就是&#xff0c;多个锁相互之间都持有其他锁所需的资源&#xff0c;所有的事务都在等待各自需要…

防止重复下单(redis+数据库唯一索引requestId实现幂等)

文章目录为什么会重复下单如何防止重复下单利用数据库实现幂等利用Redis防重为什么会重复下单 为什么会重复下单&#xff0c;对于订单服务而言&#xff0c;就是接到了多个下单的请求&#xff0c;原因可能有很多&#xff0c;最常见的是这两种&#xff1a; 用户重复提交网络原因…

使用easygui制作app

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 使用easygui制作app [太阳]选择题 对于以下python代码表述错误的一项是? import easygui easygui.msgbox("我是msgbox","msgbox标题") choices["A",…

学生网页设计作业源码(HTML+CSS)——海贼王6页代码质量好

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

【Pytorch with fastai】第 13 章 :卷积神经网络

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

数据结构之线性表的顺序存储结构

配套环境 clion + g++ 顺序存储的定义 线性表的顺序存储结构,指的是用一段地址连续的存储单元一次存储线性表中的数据元素 设计思路 使用一维数组来实现顺序存储结构 存储空间:T* m_array 当前长度:int m_length 顺序存储结构的元素获取操作 判断目标位置是否合法 如…

Backblaze 2022 Q3 硬盘故障质量报告解读

在9月份&#xff0c;我们更新了Backblaze 2022上半年的中期质量报告解读&#xff08;Backblaze2022中期SSD故障质量报告解读&#xff09;&#xff0c;基于报告中的分析数据&#xff0c;Backblaze也向外界传递作证了一个信息&#xff1a;固态硬盘SSD的长期可靠性比机械硬盘HDD要…

听说某宝抢购脚本大家都会了?那就在来个某东茅台抢购脚本吧。

前言 某宝脚本一搜能搜一大堆&#xff0c;就是不知道具体有没有用&#xff0c;但是这款某东的代码于11-17还是可用的&#xff0c;大家拿去白嫖吧&#xff01; 需要用到的一些工具 Python版本&#xff1a;3.7.8相关模块&#xff1a;DecryptLogin模块&#xff1b;argparse模块&am…

webpack5 Preload / Prefetch

代码分离 | webpack 中文文档webpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起&#xff0c;打包后的文件用于在浏览器中使用&#xff0c;但它也能够胜任转换&#xff08;transform&#xff09;、打包&#xff08;bundle&#xff09;或包裹&#xff08;pa…

【云原生 | 44】Docker搭建Registry私有仓库之管理访问权限

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…