使用k3s快速搭建集群
官网https://docs.k3s.io/zh/
参考教程https://www.yuque.com/wukong-zorrm/qdoy5p
K3s是轻量级的Kubernetes,完全兼容Kubernetes发行版。K3s易于安装,仅需要 Kubernetes内存的一半,所有组件都在一个小于100MB的二进制文件中。
K3s集群分为k3s Server(控制节点)和k3s Agent(工作节点)。所有的组件都打包在单个二进制文件中。
K3s提供了离线安装包,安装起来非常方便,可以避免安装过程中遇到各种网络资源访问问题。
安装k3s前的虚拟机配置
k3s版本:v1.25.0+k3s1
| hostname | ip | system-config | network |
|---|---|---|---|
| k8s-master | 192.168.218.137 | centos7, 内存:2g, cpu:4核, 硬盘:40g | nat模式 |
| k8s-worker1 | 192.168.218.138 | centos7, 内存:2g, cpu:4核, 硬盘:40g | nat模式 |
| k8s-worker2 | 192.168.218.139 | centos7, 内存:2g, cpu:4核, 硬盘:40g | nat模式 |
- 配置开机分配ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33
将ONBOOT=no改成yes
重启服务器:service network restart
- 更换镜像源
- 关闭防火墙,设置selinux
systemctl disable firewalld --now
yum install -y container-selinux selinux-policy-base
yum install -y https://rpm.rancher.io/k3s/latest/common/centos/7/noarch/k3s-selinux-0.2-1.el7_8.noarch.rpm
-
下载安装包
- k3s版本:v1.25.0+k3s
- 安装脚本install.sh,
https://get.k3s.io/ - k3s二进制文件,
https://github.com/k3s-io/k3s/releases/download/v1.25.0%2Bk3s1/k3s - image,
https://github.com/k3s-io/k3s/releases/download/v1.25.0%2Bk3s1/k3s-airgap-images-amd64.tar.gz
-
克隆k8s-worker1和k8s-worker2,修改ip,修改hostname,
hostnamectl set-hostname k8s-master
k3s搭建集群
- 将
k3s二进制文件移动到/usr/local/bin目录,并添加执行权限
mv k3s /usr/local/bin
chmod +x /usr/local/bin/k3s
- 将镜像移动到
/var/lib/rancher/k3s/agent/images/目录(无需解压),k3s中都是将镜像放在这个目录
mkdir -p /var/lib/rancher/k3s/agent/images/
cp ./k3s-airgap-images-amd64.tar.gz /var/lib/rancher/k3s/agent/images/
- 在
k8s-master节点执行:
chmod +x install.sh
#离线安装
INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
#安装完成后,查看节点状态
kubectl get node
#查看token
cat /var/lib/rancher/k3s/server/node-token
- 在
k8s-worker1和k8s-worker2节点执行
INSTALL_K3S_SKIP_DOWNLOAD=true \
K3S_URL=https://192.168.217.129:6443 \
K3S_TOKEN=K10649f8d4f0f3c923041813c40c6c94fc7aadf4df1932d222e8bcfbb66336a1e04::server:6d5671021aef9a0852cf0f63c2b6d223 \
./install.sh
在此环境下,启动master、worker三个节点后,关机再重启依然存在。不需要重新运行这三个节点。
镜像加速
由于kubernetes从
V1.24版本开始默认使用containerd,需要修改containerd的配置文件,才能让Pod的镜像使用镜像加速器。配置文件路径一般为/etc/containerd/config.toml
在k3s中配置镜像仓库
K3s会自动生成containerd的配置文件/var/lib/rancher/k3s/agent/etc/containerd/config.toml,不要直接修改这个文件,k3s重启后修改会丢失。
为了简化配置,K3s 通过/etc/rancher/k3s/registries.yaml文件来配置镜像仓库,K3s会在启动时检查这个文件是否存在。
- 在每个节点上新建/etc/rancher/k3s/registries.yaml文件,配置内容如下:
- help.aliyun.com/document_de…
mirrors:
docker.io:
endpoint:
- "https://03qnwci9.mirror.aliyuncs.com"
- 重启每个节点
master节点: systemctl restart k3s
worker节点: systemctl restart k3s-agent
- 查看配置是否生效
cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml
其实k3s就是提供了一个集群环境,将几台节点主机连接成一个结群,包括一个master节点和多个worker节点。具体操作节点和部署服务还是需要通过kubectl来完成。
持久化存储插件
Ceph、GlusterFS、NFS等都可以为Kubernetes提供持久化存储能力。在这选择部署Rook。
Rook项目是一个基于Ceph的Kubernetes存储插件
安装逻辑卷管理器
yum install lvm2
git clone --single-branch --branch v1.3.3 https://github.com/rook/rook.git
kubectl apply -f common.yaml
kubectl apply -f operator.yaml
kubectl apply -f cluster.yaml
一个基于Rook持久化存储集群就以容器的方式运行起来了,而接下来在Kubernetes项目上创建的所有Pod就能够通过Persistent Volume(PV)和Persistent Volume Claim(PVC)的方式,在容器里挂载由Ceph提供的数据卷了。
部署Dashboard可视化
下载配置文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
默认dashboard只能在集群内部访问,通过端口转发或者修改配置文件的service方式为NodePort之后可以访问网页
这里修改配置文件,修改service为nodeport的方式来实现集群外访问
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
type: NodePort
kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard
查看service暴露端口,使用这个端口进行访问
root@k8s-master:~# kubectl get service -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.105.55.123 <none> 8000/TCP 4m7s
kubernetes-dashboard NodePort 10.102.140.3 <none> 443:32362/TCP 4m8s
如上,应该访问https://master或其他节点ip:32362
通过token方式登录
dashboard默认会在kubernetes-dashboard名字空间创建kubernetes-dashboard的ServiceAccount,我们给这个服务账户赋予cluster-admin这个ClustrRole角色的权限
kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:kubernetes-dashboard
kubernetes1.24版本及以上创建ServiceAccount默认不会创建secret-token了,这里需要手动创建
除了
create token方式创建,也可以通过配置文件创建apiVersion: v1 kind: Secret metadata: name: sec-for-dashboard namespace: kubernetes-dashboard annotations: kubernetes.io/service-account.name: "kubernetes-dashboard" type: kubernetes.io/service-account-token参考链接
https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-service-account/#manually-create-a-long-lived-api-token-for-a-serviceaccount
kubectl create token kubernetes-dashboard(要绑定的serviceaccount) -n kubernetes-dashboard
root@k8s-master:~# kubectl create token kubernetes-dashboard -n kubernetes-dashboard
eyJhbGciOiJSUzI1NiIsImtpZCI6Il9FcjNuaWtyODhzOW1zLVFjUldndExqU1MzUnlCeUkzVG92dVA0NUZqUmcifQ.eyJhdWQiOlsi...
把这个token复制到网页里就可以登录,但是这个token好像是一次性的,因为后面执行命令kubectl describe secret -n kubernetes-dashboard获取不到token了
跳过验证
修改yaml配置文件,添加enable-skip-login,出现跳过选项,但是登录后没有权限操作
dashboard默认会在
kubernetes-dashboard名字空间创建kubernetes-dashboard的ServiceAccount,我们给这个服务账户赋予cluster-admin这个ClustrRole角色的权限kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:kubernetes-dashboard这样就有权限了
kubeconfig方式登录
略