1 简介
本文使用 mac multipass 虚拟出的 ubuntu 系统, multpass介绍请看下面这个链接文档,也是亲自实践无坑;
https://cloud.tencent.com/developer/article/2264277?areaSource=&traceId= (mac 平台使用 multipass 安装 ubuntu 虚拟机)
Lightweight Kubernetes. Production ready, easy to install, half the memory, all in a binary less than 100 MB.
K3s 是一个高可用的、经过 CNCF 认证的轻量级 Kubernetes 发行版,专为物联网及边缘计算设计。
k3s 将安装 Kubernetes 所需的一切打包进仅有 60MB 大小的二进制文件中,并且完全实现了 Kubernetes API。为了减少运行 Kubernetes 所需的内存,k3s 删除了很多不必要的驱动程序,并用附加组件对其进行替换。由于它只需要极低的资源就可以运行,因此它能够在任何 512MB 内存以上的设备上运行集群。
2 国内源安装
代码语言:javascript复制ubuntu@vm01:~$ curl –sfL
https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh |
INSTALL_K3S_MIRROR=cn sh -s -
--system-default-registry "registry.cn-hangzhou.aliyuncs.com"
--write-kubeconfig ~/.kube/config
--write-kubeconfig-mode 666
--disable traefik
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (6) Could not resolve host: xn--sfl-1n0a
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 32273 100 32273 0 0 123k 0 --:--:-- --:--:-- --:--:-- 124k
[INFO] Finding release for channel stable
[INFO] Using v1.26.3 k3s1 as release
[INFO] Downloading hash rancher-mirror.rancher.cn/k3s/v1.26.3-k3s1/sha256sum-amd64.txt
[INFO] Downloading binary rancher-mirror.rancher.cn/k3s/v1.26.3-k3s1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Skipping installation of SELinux RPM
[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.
/usr/sbin/iptables-save
/usr/sbin/iptables-restore
/usr/sbin/ip6tables-save
/usr/sbin/ip6tables-restore
[INFO] systemd: Starting k3s
如果你的带宽充足,一分钟之内即可完成 K3s 的安装和系统服务的启动,然后可以通过执行kubectl get pods -n kube-system 来验证
2.1 验证
代码语言:javascript复制ubuntu@vm01:~$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
local-path-provisioner-858c864885-vktw4 1/1 Running 0 89s
coredns-6c4b5c5567-c77wf 1/1 Running 0 89s
metrics-server-5d7f9fc86-f6hhh 1/1 Running 0 89s
2.2 配置 containerd 的 mirror
以上这些步骤只是为了加速 K3s 的安装和启动。启动 K3s 后你可能会在 K3s 上部署自己的业务(例如 nginx),而这些镜像默认也是从 DockerHub 拉取。如果使用 docker 容器运行时,你可能会在 docker 上配置 mirror 来加速镜像的拉取。
K3s 默认使用的 containerd 容器运行时。而且,可以通过 K3s 的参数来设置 containerd 的 mirror,设置方式如下:
代码语言:javascript复制cat > /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
docker.io:
endpoint:
- "http://hub-mirror.c.163.com"
- "https://docker.mirrors.ustc.edu.cn"
- "https://registry.docker-cn.com"
EOF
systemctl restart k3s
3 验证k3s
3.1 检查集群
代码语言:javascript复制# 查看集群运行情况
kubectl get nodes -o wide
kubectl get all -A -owide
kubectl describe node vm01
kubectl -n kube-system describe deploy coredns
3.2 启动 whoami 服务
代码语言:javascript复制# 快速部署 whoami 应用,指定副本为 2,默认副本为 1
kubectl create deploy whoami --image=traefik/whoami --replicas=2
kubectl describe deploy whoami
# 监控 pod 状态,通过扩缩容可直观看到 pod 的调度情况
kubectl get pods --watch
# 尝试下对 whoami 应用进行扩缩容
kubectl scale deploy whoami --replicas=5
k8s 请求链路
代码语言:javascript复制request public-ip -> node-port -> svc-port -> pod-port -> container
3.3 验证 service
默认 nodeport模式,节点监听
代码语言:javascript复制kubectl expose deploy whoami --port=80
kubectl get svc -owide
kubectl describe svc whoami
# 在本地通过 service 多访问几次,出轮询访问 container
# curl http://<external-ip>:<port>
root@vm01:~# curl `kubectl get -o template service/whoami --template='{{.spec.clusterIP}}'`
Hostname: whoami-7c88bd4c6f-bwhdj
IP: 127.0.0.1
IP: ::1
IP: 10.42.0.9
IP: fe80::742a:5bff:fe94:6450
RemoteAddr: 10.42.0.1:55533
GET / HTTP/1.1
Host: 10.43.19.74
User-Agent: curl/7.81.0
Accept: */*
LoadBalancer 模式指定公网IP
代码语言:javascript复制# 自行替换 <PUBLIC_IP> 为当前节点的公网 IP
kubectl expose deploy whoami --type=LoadBalancer --port=80 --external-ip <PUBLIC_IP>
3.4 清理测试环境
代码语言:javascript复制kubectl delete all --all
4 卸载k3s
代码语言:javascript复制# 一键卸载 server
k3s-uninstall.sh
# 一键卸载 agent
k3s-agent-uninstall.sh