K8s学习笔记1-搭建k8s集群

本次使用kubeadm方式,部署1.23.17版本

安装包百度云盘地址:

链接:https://pan.baidu.com/s/1UrIotP253DoyDIYB7G1C0Q

提取码:8q6a

集群所需虚拟机环境

|---------|------------|------|
| 主机名称 | IP | 资源 |
| harbor | 10.0.0.230 | 1c2g |
| master | 10.0.0.231 | 2c4g |
| worker1 | 10.0.0.232 | 2c4g |
| worker2 | 10.0.0.233 | 2c4g |

节点环境准备

1.所有节点hosts解析

复制代码
cat >> /etc/hosts <<EOF
10.0.0.230 harbor harbor.test.com
10.0.0.231 master
10.0.0.232 worker1
10.0.0.233 worker2
EOF

2.harbor节点部署harbor镜像仓库(之前的博客有)

3.每个节点安装docker

复制代码
yum -y install lrasz

然后将安装包拖进去获取rz -E 上传就好了

· 上传后解压安装

复制代码
tar xf docker.tar.gz
./install-docker.sh install

· 配置内核转发

复制代码
[root@master ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@master ~]# sysctl -p
net.ipv4.ip_forward = 1

· k8s三个节点每个节点配置docker

复制代码
vim /etc/docker/daemon.json 

{
  "registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"],
  "insecure-registries": ["harbor.test.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

· 解析

复制代码
  "insecure-registries": ["harbor.test.com"], #允许拉取自建仓库harbor仓库的镜像;

   "exec-opts": ["native.cgroupdriver=systemd"]   #kubeadm去寻找的cgroup默认是systemd,而docker不配置的话,默认是cgroupfs,不配置这个,部署k8s时会报错;

· 配置完成后重启docker服务

复制代码
systemctl restart docker

4.三个节点关闭swap分区

· 查看swap

复制代码
[root@master ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.8G        275M        2.7G         19M        896M        3.3G
Swap:          2.0G          0B        2.0G

· 关闭swap

复制代码
[root@master ~]# sed -ni '/^[^#]*swap/s@^@#@p' /etc/fstab

5.三个节点配置允许iptables桥接流量

复制代码
cat > /etc/modules-load.d/k8s.conf << EOF
br_netfilter
EOF

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
EOF

sysctl --system

6.关闭防火墙和selinux

· 关闭防火墙和selinux

复制代码
systemctl stop firewalld
systemctl disable firewalld

· 关闭selinux

复制代码
 vi /etc/selinux/config

改成:SELINUX=disabled

kubeadm方式部署k8s

1.上传解压软件包

复制代码
tar xf kubeadm-kubelet-kubectl.tar.gz

2.本地化安装

复制代码
yum -y localinstall kubeadm-kubelet-kubectl/*.rpm

3.设置启动及开机自启动k8s

复制代码
systemctl enable --now kubelet.service

4.查看状态(此时启动失败,不用管,因为还没配置完成,配置完之后自动回启动)

复制代码
systemctl status kubelet.service

5.初始化master节点

复制代码
 kubeadm init --kubernetes-version=v1.23.17 --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr=10.100.0.0/16 --service-cidr=10.200.0.0/16  --service-dns-domain=test.com

参数解析

复制代码
--pod-network-cidr=10.100.0.0/16   #pod的网段

--service-cidr=10.200.0.0/16    #service资源的网段

--service-dns-domain=test.com  #service集群的dns解析名称

·如果初始化失败,想要重新初始化

复制代码
先执行:kubeadm reset -f
在执行: kubeadm init --kubernetes-version=v1.23.17 --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr=10.100.0.0/16 --service-cidr=10.200.0.0/16  --service-dns-domain=test.com

·若k8s 初始化失败

·然后查看docker服务,发现docker启动失败

发现硬盘变为只读硬盘

·将只读文件系统变更为可写的

1.查找只读硬盘
2.将硬盘重新挂载
复制代码
mount -o remount,rw /sys/fs/cgroup
mount -o remount,rw /

重新初始化即可

6.初始化成功后按照提示执行

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

7.验证下master节点组件

·查看master组件

复制代码
[root@master pod]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
controller-manager   Healthy   ok                              
scheduler            Healthy   ok                              
etcd-0               Healthy   {"health":"true","reason":""}   

·查看集群节点,此时只有一个master节点

复制代码
[root@master pod]# kubectl get nodes
NAME      STATUS   ROLES                  AGE   VERSION
master    Ready    control-plane,master   31h   v1.23.17

8.将worker节点加入到集群中

·在两个worker节点上分别执行执行

复制代码
kubeadm join 10.0.0.231:6443 --token 0he81g.kbo3vnqqmep9m33p --discovery-token-ca-cert-hash sha256:f865442d8659854db32f692d937c2d8b17e2a07942e8bd7d7bbb8a1d831b3fd1

·若是初始化后很长时间没有将worker节点加入到集群中,token会失效,需要重新生成

token失效报错如下:

master节点重新生成

复制代码
kubeadm token create --print-join-command

然后在worker节点上分别执行生成的命令即可

9.查看集群状态

·master节点查看

worker节点加入集群后,在master节点上查看,此时发现,状态显示"NotReady,是因为未有CNI网络组件

复制代码
[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES                  AGE   VERSION
k8s231   NotReady   control-plane,master   13m   v1.23.17
k8s232   NotReady   <none>                 40s   v1.23.17
k8s233   NotReady   <none>                 18s   v1.23.17

10.master节点部署网络组件

·上传flannel组件(kube-flannel.yml)

·修改配置文件信息(修改网段信息--net-conf.json)

复制代码
net-conf.json: |
    {
      "Network": "10.100.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }

·部署flannel组件

复制代码
kubectl apply -f kube-flannel.yml

·查看flannel组件是否成功创建pod(每个节点是否都有)

复制代码
[root@master pod]# kubectl get pods -A -o wide | grep flannel
问题:镜像拉不下来,imagebackoff

这里,如果未更改配置文件中的镜像下载地址,【running】那里会显示【imagebackoff】,这是因为国内把docker给禁了,无法直接从docker官网拉镜像了,可以先把镜像上传到harbor,将镜像下载地址变更为harbor的就好了(进入文件,输入/,然后输入image,将镜像地址变更为harbor地址)

1.修改flannel配置文件

这里是我自己的配置的地址,这个要根据自己配置的来

复制代码
image: harbor.test.com/k8s/flannel/flannel:v0.22.2
image: harbor.test.com/k8s/flannel/flannel-cni-plugin:v1.2.0
image: harbor.test.com/k8s/flannel/flannel:v0.22.2

配置完成后

2.先删除部署flannel组件
复制代码
kubectl delete -f kube-flannel.yml
3.重新部署
复制代码
kubectl apply -f kube-flannel.yml
4.再次查看节点状态
复制代码
[root@master pod]# kubectl get nodes
NAME      STATUS   ROLES                  AGE   VERSION
master    Ready    control-plane,master   31h   v1.23.17
worker1   Ready    <none>                 30h   v1.23.17
worker2   Ready    <none>                 30h   v1.23.17

至此,k8s集群搭建完毕

相关推荐
Elastic 中国社区官方博客20 分钟前
使用 cloud-native Elasticsearch 与 ECK 运行
大数据·数据库·elasticsearch·搜索引擎·kubernetes·k8s·全文检索
大筒木老辈子25 分钟前
Linux笔记---协议定制与序列化/反序列化
网络·笔记
草莓熊Lotso32 分钟前
【C++】递归与迭代:两种编程范式的对比与实践
c语言·开发语言·c++·经验分享·笔记·其他
学Linux的语莫2 小时前
kubekey离线搭建k8s高版本>23安装,cri-dockerd通信
云原生·容器·kubernetes
我爱挣钱我也要早睡!3 小时前
Java 复习笔记
java·开发语言·笔记
知识分享小能手6 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
汇能感知8 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun8 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao9 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾9 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang