基于ubuntu的k8s集群环境搭建
先安装ubuntu,前面就不多说了,正常安装即可
记得关闭防火墙
sudo ufw status
sudo ufw disable
关闭swap,k8s运行的时候不能开启swap
临时关闭
swapoff -a
永久关闭
vim /etc/fstab
将最后一行注释掉
正常安装docker
apt install -y docker.io
写个 install.sh 文件,然后使用
#!/bin/bash
apt update && apt install apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
apt-get update
apt-cache madison kubelet kubectl kubeadm |grep '1.22.7-00'
apt install -y kubelet=1.22.7-00 kubectl=1.22.7-00 kubeadm=1.22.7-00
sh install.sh
来进行统一的安装(可能有问题,这里往后面看有解决方法)
换源为中科大或者阿里云(参考这个 https://blog.csdn.net/u011198687/article/details/121103821)
如果报错gpg错误,使用如下命令,如果没有报错就不用管
安装完成
再次禁用swap
vim /etc/default/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
systemctl daemon-reload && systemctl restart kubelet
修改cgroup管理器
ubuntu 系统,debian 系统,centos7 系统,都是使用 systemd 初始化系统的。systemd 这边已经有一套 cgroup 管理器了,如果容器运行时和 kubelet 使用 cgroupfs,此时就会存在 cgroups 和 systemd 两种 cgroup 管理器。也就意味着操作系统里面存在两种资源分配的视图,当操作系统上存在 CPU,内存等等资源不足的时候,操作系统上的进程会变得不稳定。
vim /etc/docker/daemon.json
阿里云的在https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
{
"exec-opts": [
"native.cgroupdriver=systemd"
],
"registry-mirrors": ["https://vtzcml68.mirror.aliyuncs.com"] #注意这个用自己的
}
然后重新加载kubectl
systemctl restart docker
systemctl restart kubelet
创建worker节点
这里创建的是 k8s-worker1和k8s-worker2
先将k8s-master关机
然后在库的界面对k8s-master右键 --> 管理 --> 克隆
然后选择链接克隆,建议新开一个文件夹来存放
分别设置worker节点hostname
hostnamectl set-hostname k8s-worker1
worker2一样的,需要改一下数字
查看版本是否安装成功
kubectl version
初始化k8s集群
回到master结点,执行如下命令
kubeadm init \
--kubernetes-version=v1.22.7 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.24.0.0/16 \
--ignore-preflight-errors=Swap
# 直接全部一起复制到命令行中
这里就是成功了
并且记录得到的信息,就是
执行 .kube的配置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
配置calico网络
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O
kubectl apply -f calico.yaml
这个时候整个集群只有一个结点,就是master
在其他两个,也就是 k8s-worker1和k8s-worker2里面执行如下命令,也就是刚刚叫你保存的那部分
然后再在 master 结点 执行
kubectl get nodes
可见结点添加成功
使用dashboard可视化管理k8s
这里需要去master结点配置
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
如果直接用master结点执行上面的命令报错,可以自己想办法打开这个github的网站,然后把里面的内容全部复制,通过vim 手动写入 dashboard.yaml文件
然后运行
kubectl apply -f dashboard.yaml
来应用配置
设置访问端口
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
将里面的type: ClusterIP 改为 type: NodePort
获取访问端口
kubectl get svc -A |grep kubernetes-dashboard
这里我们需要记住的是 kubernetes-dashboard的访问端口,也就是 31753这个端口
创建访问账户
vim dash.yaml
将以下内容写入dash.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
应用dash.yaml
kubectl apply -f dash.yaml
然后执行以下命令
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
来获取访问这个网站的token,token是从 ey开始到root之前结束
有时候可能会dashboard一直处于容器创建模式,可能是网络问题,可以通过重启master结点或者worker结点,多重启几次
成功之后就通过自带的火狐访问
https://master-ip:port
注意一定要是https
如果说证书有问题,直接点击高级,无视风险访问
在token处输入刚刚叫你保存的token
配置完成
参考:https://zhuanlan.zhihu.com/p/654320979