目标
实现了一个高可用,低成本的私有Kubernetes私有集群,拥有Kubernetes基本功能特性,适用于开发测试环境。在这里选择了Ranches公司的K3s-轻量级Kubernetes套件
k3s的优势特性:
- 采用二进制文件在systemd管理下运行,资源消耗量少
- 使用二进制文件直接运行,没有封装技术(如:Docker,snap),减少兼容性问题
更多关于k3s的介绍请参见官方中文文档K3s - 轻量级 Kubernetes
准备
- 华为云VPC网络可访问互联网
- 3台云主机,配置为2U4G,带10GB云硬盘
- Ubuntu20.04Lts
- k3s
- Rook v1.7
Kubernetes集群
安装集群
主机列表:
主机名 | 配置 | 数据盘 |
---|---|---|
k3s-master-1 | 2U4GB | 10GB |
k3s-master-2 | 2U4GB | 10GB |
k3s-master-3 | 2U4GB | 10GB |
启动k3s集群化安装
在第一台主机 k3s-master-1 上运行
curl -sfL https://get.k3s.io|sh -s - --cluster-init --disable servicelb --disable traefik --disable local-storage
增加--disable
参数禁止安装servicelb traefik local-storage
组件
安装输出结果
[INFO] Finding release for channel stable
[INFO] Using v1.21.4+k3s1 as release
[INFO] Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.21.4+k3s1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.21.4+k3s1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s.service
[INFO] systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s
验证状态
systemctl status k3s
输出结果如下
k3s.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-09-24 15:36:48 CST; 4 days ago
Docs: https://k3s.io
Process: 793 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service (code=exited,>
Process: 813 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
Process: 854 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 872 (k3s-server)
Tasks: 133
Memory: 1.1G
CGroup: /system.slice/k3s.service
├─ 872 /usr/local/bin/k3s server
├─ 1084 containerd
......
在 ~/.bash_aliases
文件中增加如下别名设置
alias k='kubectl'
用于K3S_TOKEN
的值存储在服务器节点上的/var/lib/rancher/k3s/server/node-token
文件中
其它master主机上运行
curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - --server https://:6443
验证集群状态,三主节点使用嵌入式etcd分布式数据库
# kubectl get node
NAME STATUS ROLES AGE VERSION
k3s-master-1 Ready control-plane,etcd,master 9m20s v1.21.4+k3s1
k3s-master-2 Ready control-plane,etcd,master 6m22s v1.21.4+k3s1
k3s-master-3 Ready control-plane,etcd,master 5m24s v1.21.4+k3s1
连接华为云镜像服务(私有镜像仓库)
创建 /etc/rancher/k3s/registries.yaml
文件,示例内容如下
mirrors:
docker.io:
endpoint:
- "http://mycustomreg.com:5000"
configs:
"mycustomreg:5000":
auth:
username: xxxxxx # this is the registry username
password: xxxxxx # this is the registry password
需要在集群内每个节点上部署建该私有仓库注册配置文件,重启k3s服务生效
systemctl restart k3s
如何获取访问华为云容器镜像服务的登录账号,请参见华为云文档 获取长期有效登录指令
卸载k3s
要从一个服务器节点上卸载K3s,请运行:
/usr/local/bin/k3s-uninstall.sh
Kubernetes网络
Kubernetes内网
- Kubernetes 的 Service 对象资源类型选择为 ClusterIP
Kubernetes外网
Nodeport方案
- 网络Service对象使用NodePort在主机上暴露服务端口
- 使用华为云的ELB对象资源将外界访问请求映射到该主机上已暴露的端口上
Kubernetes存储
Rook ceph存储
Rook将分布式存储系统变成自我管理、自我扩展、自我修复的存储服务。它将存储管理员的任务自动化:部署、启动、配置、供应、扩展、升级、迁移、灾难恢复、监控和资源管理。
Rook利用Kubernetes平台的力量,通过每个存储供应商的Kubernetes运营商来提供其服务。
准备条件
为了确保你有一个为Rook准备好的Kubernetes集群,你可以遵循这些说明。
为了配置Ceph存储集群,至少需要这些本地存储选项中的一个。
- 原始设备(没有分区或格式化的文件系统这需要在主机上安装 lvm2。为了避免这种依赖性,你可以在磁盘上创建一个单一的全磁盘分区(见下文)
- 原始分区(没有格式化的文件系统)
安装rook ceph
# git clone --single-branch --branch release-1.7 https://github.com/rook/rook.git
cd rook/cluster/examples/kubernetes/ceph
修改 operator.yaml 文件中的 ROOK_ENABLE_DISCOVERY_DAEMON
参数为true
令其自动发现新增原始设备【暂不启用减少资源消耗量】
kubectl apply -f crds.yaml -f common.yaml -f operator.yaml
# verify the rook-ceph-operator is in the `Running` state before proceeding
kubectl -n rook-ceph get pod
等 operator pod 稳定运行之后,创建rook集群
kubectl apply -f cluster.yaml
命令行方式
安装命令行工具
kubectl apply -f toolbox.yaml
一旦 rook-ceph-tools pod 开始运行,你可以使用如下指令连接进入
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
常用指令如下
ceph status
ceph osd status
ceph df
rados df
扩容Ceph集群存储
ceph集群扩容不是通过扩容云硬盘的方式,是通过在云主机上加挂云硬盘,新增加ceph集群OSD对象的方式实现
创建Kubernetes Ceph块存储对象
存储驱动为CSI,执行如下指令创建 storageclass 资源
cd rook/cluster/examples/kubernetes/ceph/csi/rbd/
kubectl apply -f storageclass.yaml
验证存储对象
$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 2d1h
附录
- k3s项目主页
- 华为云容器镜像服务
- Rook项目主页
- 阳明的博客
- Drone项目主页