2、CKA-简单搭建K8s集群
创始人
2024-01-27 15:07:56
0

基础环境:

主机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 < /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 - CommunityVersion:           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_CIDRvalue: "172.16.0.0/16"       # 这个IP地址是初始化的这个参数的地址--service-cidr=172.16.0.0/16- name: IP_AUTODETECTION_METHODvalue: "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                     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               443/TCP        24h
nginx        NodePort    172.16.183.156           80:32098/TCP   28s

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

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

相关内容

热门资讯

青年创业如何跨越科创“死亡之谷...   找投资四处碰壁 初创面临高失败率  青年创业如何跨越科创“死亡之谷”  在科技成果从实验室走向市...
小本项目万元就可以创业 小本项... 只要者能准确选取万元,把握好经营方向,做好创业者应有的心态,小本创业仍旧可以以小搏大,成就大事业。下...
小本万元创业项目 小本万元创业... 不管一万元最后投资的创业项目是什么,最主要的还是利润和受益。以下是小编给大家带来,以供参阅。  万元...
【活动回顾】我为创业狂第一季初... 特邀嘉宾活动邀请了拉尔夫创投合伙人陈冬华、东南大学教授陈国庆、博峻汇屈伯骏、邦宁资本陈普作为评委嘉宾...
没有钱怎么创业 没有钱怎么创业 2.借开店人的货,为自己赚钱。朋友开了一个鸭脖子店,但是没有开1个月,因为没有可观的人流量,于是以失...
大学生创业点子创业点子吧有哪些... 很多大学生在大学的时候就想开始创业,想创业是好事儿,起码是自主解决就业的一种自食其力的方式。但创业不...
有什么好的在家创业的小本项目 ... 有什么好的在家创业的小本项目!人人都可做的。现在很多家庭,都面对着经济上支出的压力,出门在外的父母们...
最适合年轻人的15个小本创业项...   网上开店IT行业现在不少学生创业从电子商务起步,好处是成本低---网上开店是免费的;门槛低---...
对口援疆 潮涌天山丨漳木一家亲...   在天山北麓的木垒大地,福建省对口支援新疆工作前方指挥部漳州分指挥部(以下简称“漳州分指”)完整准...
上合之约:带你领略天津之美   7月8日,以“开放包容 融合发展”为主题的“世界市长对话•上合峰会城市”活动将在天津举行。当无人...