当前位置: 首页 > news >正文

linux系统------kubenetes单机部署

目录

一、 服务器环境及初始化

1、架构分析

2、初始化

2.1、清空Iptales默认规则及关闭防火墙

2.2、关闭SELINUX

2.3、关闭Swap交换空间

2.4、设置主机名

2.5、编写hosts文件

2.6、设置内核参数

二、安装Docker环境

1、安装Docker

1.1、配置阿里源

1.2、安装docker

1.3、启动docker

2、安装cri-docker (插件)

三、安装kubeadm和kubectl

1、配置yum源

2、安装

3、设置kubectl开机自启动

四、部署Master节点

五、部署node节点

六、部署网络插件


一、 服务器环境及初始化

1、架构分析

集群角色主机名操作系统IP地址
masterk8s-masterOpenEuler24.03192.168.158.33
nodek8s-node1OpenEuler24.03192.168.158.34
nodek8s-node2OpenEuler24.03192.168.158.35

2、初始化

所有节点都需要初始化!

2.1、清空Iptales默认规则及关闭防火墙

iptables -t nat -F
iptables -t filter -F
systemctl disable --now firewalld

2.2、关闭SELINUX

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 

2.3、关闭Swap交换空间

swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab 
#因为k8s要求性能,打开swap会降低k8s的性能,所以我们要关掉

2.4、设置主机名

hostnamectl set-hostname k8s-masterhostnamectl set-hostname k8s-node1hostnamectl set-hostname k8s-node2

2.5、编写hosts文件

[root@k8s-master ~]# cat <<EOF > /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.158.33    k8s-master
192.168.158.34    k8s-node1
192.168.158.35    k8s-node2
EOF###拷贝到node节点
ssh-keygen 
ssh-copy-id 192.168.158.34
ssh-copy-id 192.168.158.35
scp /etc/hosts 192.168.158.34:/etc
scp /etc/hosts 192.168.158.35:/etc

2.6、设置内核参数

注意:安装完成docker-ce并启动之后方可设置!


cat <<EOF >> /etc/sysctl.conf
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#开起了网桥的回调功能###########
modprobe br_netfilter
sysctl net.bridge.bridge-nf-call-ip6tables=1
sysctl net.bridge.bridge-nf-call-iptables=1sysctl -p

二、安装Docker环境

所有节点都需要安装!

1、安装Docker

1.1、配置阿里源

cat <<EOF >> /etc/yum.repos.d/docker-ce.repo 
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com//docker-ce/linux/centos/9/x86_64/stable/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF

1.2、安装docker

yum install -y docker-ce

1.3、启动docker

##编辑配置文件cat /etc/docker/daemon.json
{"registry-mirrors": ["https://0vmzj3q6.mirror.aliyuncs.com","https://docker.m.daocloud.io","https://mirror.baidubce.com","https://dockerproxy.com","https://mirror.iscas.ac.cn","https://huecker.io","https://dockerhub.timeweb.cloud","https://noohub.ru","https://vlgh0kqj.mirror.aliyuncs.com"]
}##重新启动服务systemctl daemon-reloadsystemctl enable --now docker

2、安装cri-docker (插件)

下载地址:https://github.com/Mirantis/cri-dockerd/releases

把部署资源部里的cri-dockerd-0.3.8-3.el8.x86_64.rpm包仍进去,执行下一面操作


#然后
yum install -y libcgroup
rpm -ivh cri-dockerd-0.3.8-3.el8.x86_64.rpm
#或者
yum localinstall cri-dockerd-0.3.8-3.el8.x86_64.rpm

修改CRI启动脚本

#记住把docker关掉再做下面操作
#停止docker服务
systemctl stop docker
systemctl stop cri-dockervim /usr/lib/systemd/system/cri-docker.service ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
#或者
# 使用 sed 替换 ExecStart 行
sed -i 's|^ExecStart=.*|ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9|' /usr/lib/systemd/system/cri-docker.service

启动cri

systemctl daemon-reload
systemctl enable --now cri-docker

三、安装kubeadm和kubectl

所有节点都需要安装!

1、配置yum源

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF#kubelet是和节点之间的通信的组件 (命令下达的通信和命令执行完返回结果的通信)
#master会装一个大脑,叫APIserver,APIserver是我们想要pod编排的时候都需要由APIserver来下达指令,下达指令,后面的节点就需要运行指定的pod,pod就是容器的集合,由谁把这个指令传递过去呢,就是由kubelet来实现的

2、安装

yum install -y kubelet kubeadm kubectl

3、设置kubectl开机自启动

systemctl enable kubelet && systemctl start kubelet

四、部署Master节点

在k8s-master节点执行下述命令:

#生成证书凭证
kubeadm init --apiserver-advertise-address=192.168.158.33 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.15 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --cri-socket=unix:///var/run/cri-dockerd.sock
#一种通过选项的方式往里写
#二种通过配置文件
#kubeadm命令在本地运行了一个pod,pod里面实现的是k8功能,这是自管理功能
#原生部署,利用直接在系统里边安装对应的服务
#还有Minikube部署#当有凭证之后,后来忘记了,用下面命令可以重新打印一下凭证
[root@k8s-master ~]# kubeadm token create --print-join-command 
kubeadm join 192.168.158.33:6443 --token c5ih0q.gv3u8we68ygklvmt --discovery-token-ca-cert-hash sha256:340b31773e47d7aa22a0de1b4c183d585fd114a30acbdffe2a097ee228aed0c3 

如果出问题后,集群还原

kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock
#还原一定要加上后面的  --cri-socket=unix:///var/run/cri-dockerd.sock

注意保存证书文件

每个人的证书是不一致的,注意查看自己的证书。

执行上面master节点操作后,把最后的那一段复制下来

这个是其它的节点加入到当前master集群里边的凭证

kubeadm join 192.168.158.33:6443 --token x6mwe3.u6iyk36qjpmfz90r \--discovery-token-ca-cert-hash sha256:340b31773e47d7aa22a0de1b4c183d585fd114a30acbdffe2a097ee228aed0c3 

配置管理集群文件 (重点)这个现在可以不用操作,但一定要知道

#知识点,k8集群里边由单独的用户,在系统里边也有用户,k8里的用户不能在系统中登录,系统中用户也不能在k8里登录,但是我现在需要用系统中的用户去操作k8集群,但是现在k8集群只能用本身的账户来进行操作,如何让系统里的用户和k8里的用户建立起映射关系,这就需要admin.conf这个文件,只要把这个文件放到当前系统中某一个特定的账户上的目录下,就可以直接映射成这个账户去操作k8集群了,这就是为什么要把这个文件拷贝到特定的目录里边,并起个名[root@k8s-master ~]# mkdir .kube
[root@k8s-master ~]# ls -a 
.                .bash_history  .bashrc  cri-dockerd-0.3.8-3.el8.x86_64.rpm  .ssh
..               .bash_logout   .cache   .cshrc                              .tcshrc
anaconda-ks.cfg  .bash_profile  .config  .kube                               .viminfo
[root@k8s-master ~]# cd .kube/
[root@k8s-master .kube]# ls
[root@k8s-master .kube]# touch config
#当我的用户去执行kubectl命令的时候,这个命令里面写了一个机制,就会去找当前目录里边config这个文件[root@k8s-master .kube]# cat /etc/kubernetes/admin.conf > configuser: kubernetes-admin #映射admin.conf文件里的这个账户(最高权限账户,可管理所有)server: https://192.168.158.33:6443  #这个是解析#然后执行kubectl命令就不会被拒绝了
[root@k8s-master .kube]# kubectl get node
NAME         STATUS     ROLES           AGE   VERSION
k8s-master   NotReady   control-plane   37m   v1.28.15#了解一下如何映射赋权(记住生产环境下别这样做,因为这个权限非常大)
[root@k8s-master ~]# su - zhao
[zhao@k8s-master ~]$ mkdir .kube
[zhao@k8s-master ~]$ touch .kube/config
[zhao@k8s-master ~]$ exit
注销
[root@k8s-master ~]# cat /etc/kubernetes/admin.conf > /home/zhao/.kube/config
[root@k8s-master ~]# su - zhao 
[zhao@k8s-master ~]$ kubectl get node    #账户映射赋权成功,可执行kubectl命令
NAME         STATUS     ROLES           AGE   VERSION
k8s-master   NotReady   control-plane   45m   v1.28.15

五、部署node节点

分别在k8s-node1和k8s-node2中执行:

kubeadm join 192.168.158.33:6443 --token x6mwe3.u6iyk36qjpmfz90r \--discovery-token-ca-cert-hash sha256:340b31773e47d7aa22a0de1b4c183d585fd114a30acbdffe2a097ee228aed0c3   --cri-socket=unix:///var/run/cri-dockerd.sock
#注意:在从节点操作时一定要加入上面的后面那一行   --cri-socket=unix:///var/run/cri-dockerd.sock

如果忘记master的凭证可执行下面指令从新打一遍

#打印一份
[root@k8s-master ~]# kubeadm token create  --print-join-command 
kubeadm join 192.168.158.33:6443 --token zonogq.6d5cbylrxlas2dvv --discovery-token-ca-cert-hash sha256:340b31773e47d7aa22a0de1b4c183d585fd114a30acbdffe2a097ee228aed0c3 #重新生成
--

查看集群状态:

[root@k8s-master ~]# kubectl get nodes   #查看节点信息
NAME         STATUS     ROLES           AGE     VERSION
k8s-master   NotReady   control-plane   2d16h   v1.28.15
k8s-node1    NotReady   <none>          2d16h   v1.28.15
k8s-node2    NotReady   <none>          2m14s   v1.28.15

目前看到的是NotReady状态,是由于没有安装网络插件的原因。ROLES角色一栏显示“none”,可以通过一下命令修改角色名称:

kubectl label node k8s-master node-role.kubernetes.io/master=master
kubectl label node k8s-node1 node-role.kubernetes.io/worker=worker
kubectl label node k8s-node2 node-role.kubernetes.io/worker=worker

六、部署网络插件

calico组件的相关镜像,目前在国内无法下载。需要在master主机先创建calico的相关资源,然后查看所需镜像,最后通过外网服务器进行下载。具体的操作流程如下:

###主节点
[root@k8s-master ~]# rz
rz waiting to receive.**[root@k8s-master ~]# ls
127.0.0.1  anaconda-ks.cfg  calico.tar
[root@k8s-master ~]# docker load -i calico.tar
[root@k8s-master ~]# rz
rz waiting to receive.**[root@k8s-master ~]# rz
rz waiting to receive.**[root@k8s-master ~]# lsanaconda-ks.cfg  calico.tar  custom-resources.yaml  tigera-operator.yaml
[root@k8s-master ~]# kubectl create -f tigera-operator.yaml
##编辑网络信息
[root@k8s-master ~]# vim custom-resources.yaml 
apiVersion: operator.tigera.io/v1 
kind: Installation 
metadata: name: default 
spec: calicoNetwork: ipPools: - blockSize: 26 cidr: 10.244.0.0/16 # 修改此值,与“kubeadm init”命令中指定的 Pod 网络CIDR 地址范围保持一致encapsulation: VXLANCrossSubnet natOutgoing: Enabled nodeSelector: all() 
... 
[root@k8s-master ~]# kubectl create -f custom-resources.yaml###从节点操作
[root@k8s-node ~]# rz
rz waiting to receive.**[root@k8s-node ~]# ls
127.0.0.1  anaconda-ks.cfg  calico.tar
[root@k8s-node ~]# docker load -i calico.tar
###主节点检测
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   91m   v1.28.15
k8s-node1    Ready    worker                 63m   v1.28.15
k8s-node2    Ready    worker                 63m   v1.28.15
[root@k8s-master ~]# kubectl -n kube-system get pod 
NAME                                 READY   STATUS    RESTARTS   AGE
coredns-66f779496c-n2klt             1/1     Running   0          93m
coredns-66f779496c-xzrb7             1/1     Running   0          93m
etcd-k8s-master                      1/1     Running   0          93m
kube-apiserver-k8s-master            1/1     Running   0          93m
kube-controller-manager-k8s-master   1/1     Running   0          93m
kube-proxy-5tkj5                     1/1     Running   0          65m
kube-proxy-hvt85                     1/1     Running   0          93m
kube-proxy-n2gnk                     1/1     Running   0          66m
kube-scheduler-k8s-master            1/1     Running   0          93m

资源提交后,使用下述命令列出所需的镜像文件:

[root@k8s-master ~]# kubectl -n calico-system describe pod | grep "Image:" | sort | uniqImage:           docker.io/calico/cni:v3.29.2Image:           docker.io/calico/csi:v3.29.2Image:           docker.io/calico/kube-controllers:v3.29.2Image:           docker.io/calico/node-driver-registrar:v3.29.2Image:           docker.io/calico/node:v3.29.2Image:           docker.io/calico/pod2daemon-flexvol:v3.29.2Image:           docker.io/calico/typha:v3.29.2

http://www.dtcms.com/a/336530.html

相关文章:

  • LeetCode 分类刷题:2962. 统计最大元素出现至少 K 次的子数组
  • 5G虚拟仿真平台
  • [激光原理与应用-292]:理论 - 波动光学 - 驻波的本质是两列反向传播的相干波通过干涉形成的能量局域化分布
  • 安全多方计算(MPC)简述
  • Compose笔记(四十六)--Popup
  • Houdini 粒子学习笔记
  • 服装外贸管理软件 全流程优化解决方案
  • 学习记录(二十)-Overleaf如何插入参考文献
  • Chrome 插件开发实战:从入门到上架的全流程指南
  • 最长回文子串问题:Go语言实现及复杂度分析
  • 63.不同路径
  • Django前后端交互实现用户登录功能
  • 计算机网络---跳板机与堡垒机
  • Centos 更新/修改宝塔版本
  • 第七十八章:AI的“智能美食家”:输出图像风格偏移的定位方法——从“滤镜病”到“大师风范”!
  • 点云的PFH 和 FPFH特征
  • k8sday09
  • C# 反射和特性(自定义特性)
  • 股票术语:“支撑位”
  • 解码词嵌入向量的正负奥秘
  • 一张图总结 - AI代理上下文工程:构建Manus的经验教训
  • Python多线程、锁、多进程、异步编程
  • Linux | i.MX6ULL网络通信-套字节 TCP(第十七章)
  • 【k8s】Kubernetes核心概念与架构详解
  • 4.8 Vue 3: provide / inject 详解
  • LEA(Load Effective Address)指令
  • MACS2简介
  • 欠拟合和过拟合的特征标志,有什么方法解决,又该如何避免
  • 评测系统构建
  • 20.LeNet