Linux部署单节点k8s

参考文档:https://www.yuque.com/fairy-era/yg511q/hg3u04#27a2b370(大佬文档)

一、为什么要部署单节点k8s?

通常来说k8s集群至少是需要三个节点或三个节点以上来搭建,单由于在公司环境中做多集群管理平台rancher测试,且没有多余服务器资源,所以必须在一台服务器上rancher和k8s集群,所以就有了单节点部署k8s集群。

我使用的服务器IP:10.23.197.21

二、部署流程

  1. 预先准备

检查系统版本,要求系统版本在7.5以上。

cat /etc/redhat-release

1.1关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld

1.2关闭SElinux

查看SElinux是否开启

getenforce

临时关闭SElinux,不推荐使用,重启后失效

setenforce 0

永久关闭SElinux,推荐使用

sed -i 's/enforcing/disabled/' /etc/selinux/config

1.3关闭sawp分区

临时关闭分区,重启后失效

swapoff -a

永久关闭swap分区,需要重启

sed -ri 's/.*swap.*/#&/' /etc/fstab

1.4将IPv4流量传递到iptables链

将节点上IPv4流量传递到iptables的链(这一步网上有很多方法,方法都不太一样,单节点部署可以略过这一步),这里使用serivce默认的iptables代理模型,如果使用ipvs代理模型,需要另外安装ipset和ipvsadm组件。

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
vm.swappiness = 0
EOF
#加载模块
modprobe br_netfilter
#查看模块是否加载
lsmod | grep br_netfilter
#生效
sysctl --system

1.5时间同步

如果是多节点部署,每个节点都需要同步时间。

yum install ntpdate -y

1.6设置主机名

hostnamectl set-hostname k8s-master

添加/etc/hosts文件

cat >> /etc/hosts << EOF
10.23.197.21 k8s-master
10.23.197.21 etcd
10.23.197.21 registry
EOF

1.7安装docker

请参考https://blog.csdn.net/weixin_48878440/article/details/122152407?spm=1001.2014.3001.5501

1.8更改docker的启动方式为systemd

在/etc/docker/daemon.json将cgroupfs更改为systemd。

刷新文件重启docker

systemctl daemon-reload
systemctl restart docker

1.9重启

reboot
  1. 部署k8s

部署k8s目前主流的方式有kubeadm、minikube、二进制包。minikube可以在单节点快速搭建一套完整的k8s集群,kubeadm是快速搭建k8s集群的工具包,二进制包是从官网上下载每个组件的二进制包,此方式对于理解kubernetes组件更加有效,同样也会比较繁琐。

我们选择kubeadm部署单节点,如果你有多余的服务器设备(虚拟机或物理机),只需要通过kubeadm join加入集群网络即可。

2.1添加阿里云YUM源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2.2安装三kubeadm、kubelet、kubectl

因为k8s版本更新较快,推荐使用某个固定版本,且最好在1.24以下的版本,因为在1.24后k8s已经弃用docker,安装方法可能会不同。

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

设置kubelet开机自启动。

systemctl enable kubelet

此处可以先启动systemctl start kubelet,查看kubelet是否可以正常启动,通常情况下kubeadm init初始化失败,大部分原因是kubelet启动异常。(这一步也可以省略)

systemctl start kubelet
systemctl status kubelet

2.3集群初始化

kubeadm init集群初始化,由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里需要指定阿里云镜像仓库地址。

kubeadm init \
  --apiserver-advertise-address=10.23.197.21 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.18.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16

2.4使用kubectl工具

出现join init ......字样表示集群初始化成功

根据提示,在节点上使用kubectl工具

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

2.5安装网络插件flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

查看网络插件安装情况,coredns会比较慢,大概需两分钟。

kubectl get pods -n kube-system

查看node状态,会发现此时k8s-master状态为NotReady,稍等片刻即可,如果不安装flannel,状态会一直处于NotReady状态。

kubectl get nodes

2.6组件异常

查看集群健康,发现scheduler、controller-manager组件状态为Unhealthy,原因是kube-controller-manager.yaml和kube-scheduler.yaml设置的默认端口是0。

kubectl get cs

将kube-controller-manager.yaml、kube-scheduler.yaml文件中的“- --port=0”注释掉

cd /etc/kubernetes/manifests/
ll
#vim更改文件 
systemctl restart kubelet.service
systemctl status kubelet.service
kubectl get cs

2.7删除污点

由于是单节点,master默认不接受任务调度,需要删除污点

kubectl describe node k8s-master | grep Taints

发现master节点有污点(即NoSchedule字样),删除master污点

kubectl taint nodes --all node-role.kubernetes.io/master-

2.8测试资源部署

创建deployment资源任务

kubectl create deployment nginx --image=nginx

暴露端口,创建svc

kubectl expose deployment nginx --port=80 --type=NodePort

查看服务状态

kubectl get pods,svc -o wide
curl [ServiceIP]:80

可以显示nginx的html标签。

至此,单节点部署k8s完成,只不过当前集群只有一个个master节点。

三、注意事项

  1. 多节点部署

假设是多节点部署注意更改/etc/hosts文件,设置工作节点的hostname,并添加每个节点的hosts文件。

#例子
192.168.136.21 Master
192.168.136.22 Node01
192.168.136.23 Node02

你可能感兴趣的:(k8s,kubernetes,docker,运维)