k8s简化版k3s安装使用
环境:联网环境、centos7
1 k3s简介--5 less than K8s
k3s[1]是rancher®开源的一个Kubernetes发行版,从名字上就可以看出k3s相对k8s做了很多裁剪和优化,二进制程序不足50MB,占用资源更少,只需要512MB内存即可运行。
而之所以称为k3s是因为相对k8s裁剪了如下5个部分:
- 过时的功能和非默认功能
- Alpha功能
- 内置的云提供商插件
- 内置的存储驱动
- Docker
官方称k3s是:
★ k3s是史上最轻量级Kubernetes.
”
相对k8s最主要的优化如下:
- 使用内嵌轻量级数据库SQLite作为默认数据存储替代etcd,当然etcd仍然是支持的。
- 内置了local storage provider、service load balancer、helm controller、Traefik ingress controller,开箱即用。
- 所有Kubernetes控制平面组件如api-server、scheduler等封装成为一个精简二进制程序,控制平面只需要一个进程即可运行。
- 删除内置插件(比如cloudprovider插件和存储插件)。
- 减少外部依赖,操作系统只需要安装较新的内核以及支持cgroup即可,k3s安装包已经包含了containerd、Flannel、CoreDNS,非常方便地一键式安装,不需要额外安装Docker、Flannel等组件。
k3s的四大使用场景为:
- Edge
- IoT
- CI
- ARM
当然如果想学习k8s,而又不想折腾k8s的繁琐安装部署,完全可以使用k3s代替k8s,k3s包含了k8s的所有基础功能,而k8s附加功能其实大多数情况也用不到。
2 一键式安装k3s
k3s安装确实非常简单,只需要一个命令即可完成:
1 2 3 4 5 6 7 8 9 10 11 12 13 | curl -sfL https: //get .k3s.io | sh - Complete! [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 from /etc/systemd/system/multi-user .target.wants /k3s .service to /etc/systemd/system/k3s .service. [INFO] systemd: Starting k3s |
通过如上只执行了一个命令即部署了一套all in one k3s单节点环境,相对k8s无需额外安装如下组件:
- kubelet
- kube-proxy
- Docker
- etcd
- ingress,如ngnix
当然可以使用k3s agent添加更多的worker node,只需要添加K3S_URL和K3S_TOKEN参数即可,其中K3S_URL为api-server URL,而k3S_TOKEN为node注册token,保存在master节点的/var/lib/rancher/k3s/server/node-token路径。
3 和使用k8s一样使用k3s
3.1 和使用k8s一样使用k3s命令工具
k3s内置了一个kubectl命令行工具,通过k3s kubectl调用,为了与k8s的kubectl命令一致,可以设置alias别名:
1 2 3 4 5 6 7 8 | # 该步骤可以省略,在/usr/local/bin中已经添加了一个kubectl软链接到k3s alias kubectl= 'k3s kubectl' # 配置kubectl命令补全 source <(kubectl completion bash ) [root@localhost ~] # tail -n 2 /etc/profile alias kubectl= 'k3s kubectl' source <(kubectl completion bash ) [root@localhost ~] # source /etc/profile |
配置完后,我们就可以通过kubectl查看kube-system运行的pod列表如下:
1 2 3 4 5 6 7 8 | [root@localhost ~] # kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-854c77959c-v65bq 1 /1 Running 0 9m2s kube-system metrics-server-86cbb8457f-58dtv 1 /1 Running 0 9m2s kube-system local -path-provisioner-5ff76fc89d-zr9w7 1 /1 Running 0 9m2s kube-system helm- install -traefik-4dcfr 0 /1 Completed 0 9m2s kube-system svclb-traefik-xdpqp 2 /2 Running 0 8m28s kube-system traefik-6f9cbd9bd4-bh96w 1 /1 Running 0 8m28s |
我们发现并没有运行apiserver、controller-manager、scheduler、kube-proxy以及flannel等组件,因为这些都内嵌到了k3s进程。另外k3s已经给我们默认部署运行了traefik ingress、metrics-server等,不需要再额外安装了。
k3s默认没有使用Docker作为容器运行环境,而是使用了内置的contained,可以使用crictl子命令与CRI交互。
1 2 3 4 5 6 7 8 9 10 11 | 当然如果习惯使用docker命令行可以设置如下别名: alias docker= 'k3s crictl' # 配置docker命令补全 source <(docker completion) complete -F _cli_bash_autocomplete docker #具体配置 [root@localhost ~] # tail -n 3 /etc/profile alias docker= 'k3s crictl' source <(docker completion) complete -F _cli_bash_autocomplete docker [root@localhost ~] # source /etc/profile |
通过docker ps查看运行的容器:
1 2 3 4 5 6 7 8 9 | [root@localhost ~] # docker ps -a CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID d9d4c339a5960 aa764f7db3051 9 minutes ago Running traefik 0 6b361c2430c9a 0214f1210f5dc 897ce3c5fc8ff 9 minutes ago Running lb-port-443 0 06c2ce2deaba9 ce1953ba893b5 897ce3c5fc8ff 9 minutes ago Running lb-port-80 0 06c2ce2deaba9 3195afeb29c23 3b0b04aa3473f 9 minutes ago Exited helm 0 1928fc8b40b1f c4570ee865459 9dd718864ce61 10 minutes ago Running metrics-server 0 0b03b5fbafcff 6bc9406727a93 148c192562719 10 minutes ago Running local -path-provisioner 0 761e8ecd8d1ee b68bc88f5ff06 296a6d5035e2d 10 minutes ago Running coredns 0 109929bb2385c |
当然我们只是使用crictl模拟了docker命令,相对真正的docker我们发现多了ATTEMPT以及POD ID,这是CRI所特有的。
3.2 和使用k8s一样创建k3s资源
我们使用k8s最喜欢拿来入门的bootcamp作为例子,Deployment声明如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | apiVersion: apps / v1 kind: Deployment metadata: labels: app: kubernetes - bootcamp - v1 name: kubernetes - bootcamp - v1 spec: replicas: 2 selector: matchLabels: app: kubernetes - bootcamp - v1 template: metadata: labels: app: kubernetes - bootcamp - v1 spec: containers: - image: jocatalin / kubernetes - bootcamp:v1 name: kubernetes - bootcamp - v1 使用kubectl apply 创建Deployment资源: # kubectl apply -f kubernetes-bootcamp-v1.yaml deployment.apps / kubernetes - bootcamp - v1 created # kubectl get pod NAME READY STATUS RESTARTS AGE kubernetes - bootcamp - v1 - c5ccf9784 - m79vt 1 / 1 Running 0 3s kubernetes - bootcamp - v1 - c5ccf9784 - 5blct 1 / 1 Running 0 3s 创建Service: # kubectl apply -f - apiVersion: v1 kind: Service metadata: labels: app: kubernetes - bootcamp - v1 name: kubernetes - bootcamp - v1 spec: ports: - port: 8080 protocol: TCP targetPort: 8080 selector: app: kubernetes - bootcamp - v1 type : ClusterIP # kubectl get service NAME TYPE CLUSTER - IP EXTERNAL - IP PORT(S) AGE kubernetes ClusterIP 10.43 . 0.1 <none> 443 / TCP 29m kubernetes - bootcamp - v1 ClusterIP 10.43 . 132.97 <none> 8080 / TCP 8m14s # curl 10.43.132.97:8080 Hello Kubernetes bootcamp! | Running on: kubernetes - bootcamp - v1 - c5ccf9784 - 5blct | v = 1 |
做一个决定,并不难,难的是付诸行动,并且坚持到底。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)