1、环境准备
1.1、两台虚拟机:
k3s-master(192.168.10.102) 部署底层k8s集群,且k3s-master on k8s部署
k3s-node(192.168.10.103) 部署k3s-agent,以服务方式启动注册到k3s-master
1.2、k3s-master底层集群
部署local-path-storage,作为k3s文件存储;
部署mysql,作为k3s集群后端数据库;
2、k3s-master部署
本例使用k3s:v1.26.12版本部署验证
社区镜像:rancher/k3s:v1.26.12-k3s1
2.1、k3s使用StatefulSet类型启动2个副本,达到高可用目的,具体模板参考如下:
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: k3s-server
namespace: k3s-cluster
spec:
replicas: 2
selector:
matchLabels:
app: k3s
template:
metadata:
labels:
app: k3s
spec:
containers:
- name: k3s
image: dockerhub.kubekey.local/rancher/k3s:v1.26.12-k3s1 # 选择合适的版本
command:
- k3s
args:
- server
- --token=自定义
- --node-external-ip=192.168.10.102
- --advertise-port=31443
- --tls-san=192.168.10.102
- --datastore-endpoint=mysql://root:mysqlpassword@tcp(192.168.10.102:3306)/k3s
#- --write-kubeconfig=/data/k3s-config/kube-config.yaml
#- --data-dir=/data
- --disable=traefik,servicelb,metrics-server
- --disable-network-policy
- --disable-agent
- --disable-cloud-controller
- --egress-selector-mode=disabled
#- --flannel-backend=none
- --kube-apiserver-arg=bind-address=127.0.0.1
ports:
- containerPort: 6443
name: https
- containerPort: 8080
name: http
livenessProbe:
failureThreshold: 8
httpGet:
host: 127.0.0.1
path: /livez
port: 6443
scheme: HTTPS
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 15
readinessProbe:
failureThreshold: 3
httpGet:
host: 127.0.0.1
path: /readyz
port: 6443
scheme: HTTPS
periodSeconds: 1
timeoutSeconds: 15
volumeMounts:
- mountPath: /var/lib/rancher/k3s
name: k3s-storage
#volumes:
#- name: k3s-storage
# emptyDir: {}
volumeClaimTemplates:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: k3s-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
volumeMode: Filesystem
storageClassName: local-path
---
apiVersion: v1
kind: Service
metadata:
name: k3s-service
namespace: k3s-cluster
spec:
selector:
app: k3s
ports:
- protocol: TCP
port: 6443
targetPort: 6443
nodePort: 31443
type: NodePort
2.2、启动k3s-master
查看mysql中会自动创建出名为k3s的database,是模板中自定义的。
进去k3s容器内查看,此时没有node节点,启动了local-path和coredns两个Pod处于pending状态。
3、k3s-agent部署
需要从github获取master使用的相同版本k3s二进制文件及组件镜像tar包;
获取k3s安装脚本:
3.1、启动k3s-agent
node节点上创建目录/var/lib/rancher/k3s/agent/images,将上述镜像tar包放入该目录,后续启动agent会自动加载这些镜像;
将k3s二进制文件放入node节点的/usr/local/bin/目录下;
执行安装命令:
INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_VERSION=v1.26.12+k3s1 INSTALL_K3S_MIRROR=cn K3S_URL=192.168.10.102:31443 K3S_TOKEN=自定义 ./k3s-install.sh
日志如下:
查看k3s-agent服务状态:
3.2、进入master容器查看
node注册成功,组件运行正常
4、应用部署验证
4.1、获取k3s集群kubeconfig
kubeconfig文件保存在master容器中/etc/rancher/k3s/k3s.yaml
复制到主机节点,修改server: //192.168.10.102:31443
在主机上即可通过该config访问k3s集群,如下:
4.2、部署nginx验证