非典型K8s入门指南:搭建本地练习环境

·

3 min read

其实想写 K8s 很久了,但老是担心自己功力不够,写不好,另一方面又觉得现在教程这么多,官方中文版也蛮好的,再去写一版似乎也没啥意义,再说 K8s 里面的知识点也挺多的,也不知道要写多久。

初衷来源于当前的工作环境,周边一些同事在啃大部头书《Kubernetes权威指南》,一年了,也没啥进展,也没有看完,心中着实着急。作为曾经的一名 CRUD 工程师,我以为,普通开发者,完全没有必要一开始就看这么厚的书。同事既没独立部署过 K8s,也没有玩过minikube,平时想要练习 kubectl, 还得 ssh 登录到公司到的 k8s master 节点上操作……

当然,每个人都有自己的学习习惯,以我的观察,除了工作及面试需求,大部分应用开发者,都不会主动去学习 K8s 的相关知识的,更不用提实操了。

再者,从笔者的经历来看:对于应用开发工程师面言,了解 K8s 基本概念,知道如何使用即可,这样有助于跨部门的协作与沟通。因为软件工程是分好多种角色,譬如:开发、测试、运维等,在大部分公司, 一个人不可能胜任所有角色,特别是在中大型公司,对权限管控较严的,普通开发可能完全接触不到运维的工作,更别说操作 K8s 了。

不知是走运还是不幸,笔者兼任过开发、测试、运维,还有 PM,在跨部门协作方面,还是有一些浅薄的经验的,懂的多一点,沟通上会省心不少。

回归正题,想要学习 K8s,除了耐心阅读官方文档之外,还得有一个友好、可快速启动的实操学习环境。为了写这篇文章,笔者根据自己过往的学习路径的经验,经过一系列调研(包括但不限于minkube、kind、k3d、k3s等),选择了一套最易于本地学习K8s,同时又比较省资源的一套方案(想起当年为了学习 K8s,那叫一个折腾)。

K8s 本地练习环境选型

所谓练习方案要考虑要网络环境(科学上网)、资源占用量、启动和销毁的难易,考虑到有不少人还在使用 windows 开发,所以选型也需要尽量跨平台体验的一致性,所以,我选用的方案是:multipass+k3s,下面逐一进行介绍。

Multipass

Multipass 是由Ubuntu官方提供,在Linux,MacOS和Windows上快速生成 Ubuntu虚拟机 的工具。它提供了一个简单但功能强大的CLI,可让我们在本地快速进入Ubuntu系统环境并使用Linux命令,亦可以在本地计算机创建自己的迷你型云服务器。总的来说就是在本地创建Ubuntu虚拟机,可以获得云端Ubuntu服务器般的体验。

选它是因为入门友好,且够轻量,参照安装文档即可:https://multipass.run/install,笔者使用的是苹果电脑,安装命令如下所示:

brew install --cask multipass

简单一条命令就行启动一个 ubuntu 虚拟机,为了加速首次创建虚拟机时的镜像下载速度,可以设置国内镜像如下所示:

multipass set local.image.mirror=https://mirrors.cloud.tencent.com/ubuntu-cloud-images/

创建虚拟机机

multipass launch 22.04 --name ik8s

如何简单就创建好了一个ubuntu:22.04、名为 ik8s 的虚拟机,使用命令 multipass list 查看刚刚创建好的虚拟机

multipass list
Name                    State             IPv4             Image
ik8s                    Running           192.168.106.20   Ubuntu 22.04 LTS

使用命令 multipass shell ik8s 进入虚拟机里命令行

multipass shell ik8s
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-101-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro
  ……
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@ik8s:~$

常用命令如下所示

# 停止ik8s
multipass stop ik8s
# 启动ik8s
multipass start ik8s
# 删除ik8s
multipass delete ik8s

K3s

K3s 是一个轻量级的 Kubernetes 发行版,它针对边缘计算、物联网等场景进行了高度优化

轻巧,到什么程度呢,启动起来只用不到 0.5G 内存,没法不爱。而且,对国内用户的支持也是相当友好,这么说吧,在线安装 K8s 的用户体验,我就没见过比 K3s 更友好的了,一条命令拿下

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

INSTALL_K3S_MIRROR=cn 充分考虑到了国内用户的使用体验,对主流操作系统如 centos、debian 等,以及各种架构如 arm64、amd64 的支持也是相当友好。

K8s本地练习环境搭建

前面介绍了一些技术选型,下面开始正式搭建本地 K8s 了

安装 docker

对于这一步,自然是可以参照 docker 的官方文档启动并安装,这里我提供一个更简单、通用在线安装 docker 的方法,进入 ik8s ,在线安装 25.0.5 版本的 docker,如下所示

ubuntu@ik8s:~$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun --version 25.0.5
# Executing docker install script, commit: e5543d473431b782227f8908005543bb4389b8de
+ sudo -E sh -c 'apt-get update -qq >/dev/null'
+ sudo -E sh -c 'DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null'
+ sudo -E sh -c 'install -m 0755 -d /etc/apt/keyrings'
+ sudo -E sh -c 'curl -fsSL "https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg'
+ sudo -E sh -c 'chmod a+r /etc/apt/keyrings/docker.gpg'
+ sudo -E sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy stable" > /etc/apt/sources.list.d/docker.list'
+ sudo -E sh -c 'apt-get update -qq >/dev/null'
INFO: Searching repository for VERSION '25.0.5'
INFO: apt-cache madison docker-ce | grep '25.0.5' | head -1 | awk '{$1=$1};1' | cut -d' ' -f 3
INFO: apt-cache madison docker-ce-cli | grep '25.0.5' | head -1 | awk '{$1=$1};1' | cut -d' ' -f 3
+ sudo -E sh -c 'DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce=5:25.0.5-1~ubuntu.22.04~jammy docker-ce-cli=5:25.0.5-1~ubuntu.22.04~jammy containerd.io docker-compose-plugin docker-ce-rootless-extras=5:25.0.5-1~ubuntu.22.04~jammy docker-buildx-plugin >/dev/null'
……
To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/

WARNING: Access to the remote API on a privileged Docker daemon is equivalent
         to root access on the host. Refer to the 'Docker daemon attack surface'
         documentation for details: https://docs.docker.com/go/attack-surface/

================================================================================

安装 k3s

容器运行时为 docker, k8s 版本为 v1.26.7,以下是安装示例

ubuntu@ik8s:~$ curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_VERSION=v1.26.7+k3s1 INSTALL_K3S_MIRROR=cn sh -s - --docker
[INFO]  Using v1.26.7+k3s1 as release
[INFO]  Downloading hash rancher-mirror.rancher.cn/k3s/v1.26.7-k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary rancher-mirror.rancher.cn/k3s/v1.26.7-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]  Skipping /usr/local/bin/ctr symlink to k3s, command exists in PATH at /usr/bin/ctr
[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

快到离谱,快到不可思议,如果你有更快的方法,一定要告诉我。

查看 K3s 状态

ubuntu@ik8s:~$ sudo k3s kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE   ERROR
controller-manager   Healthy   ok
etcd-0               Healthy
scheduler            Healthy   ok

好了,现在你拥有一个本地的 K8s 练习环境,可以尽情折腾了。


参考: