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地址 |
---|---|---|---|
master | k8s-master | OpenEuler24.03 | 192.168.158.33 |
node | k8s-node1 | OpenEuler24.03 | 192.168.158.34 |
node | k8s-node2 | OpenEuler24.03 | 192.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