文章首发于公号「阿拉平平」

相信 Kubernetes 以其复杂的架构,劝退了不少想要学习的新手。仅是搭建集群,学习成本就不低。我的建议是:与其将时间放在搭建上,不如将精力放到 K8s 本身,等熟悉各个功能了,再搭建集群去了解各个组件,这种学习方法可能更加高效。

今天和大家分享的一个开源的 K8s 发行版:k0s,只需将 k0s 的二进制文件复制到各个主机上,就可以快速搭 K8s 集群。

项目介绍

k0s [1] 是一款简易、稳定且经过认证的 Kubernetes 发行版,它提供了构建 Kubernetes 集群所需的所有内容,集成了运行 K8s 所有必需的组件。

环境准备

k0s 支持单/多节点部署,这里仅介绍多节点部署,其它安装方法可以参考官方文档 [2]

我准备了两台 CentOS 7.8 的虚拟机,信息如下:

主机名IP
master192.168.128.131
worker192.168.128.132

需要说明的是,两台主机的防火墙和 SELinux 均已关闭。

下载安装

目前 k0s 的最新版本为 v0.11.0,可以通过脚本下载并安装:

$ curl -sSLf https://get.k0s.sh | sudo sh

安装完成后,验证下版本:

[root@master ~]# k0s version
v0.11.0

各主机下载完成后,就可以搭建集群了。

搭建集群

最新版本的 k0s 支持通过命令创建服务,只需在各个主机上建好各自的服务,直接启动即可。

master

在 master 主机上安装 controller 服务:

[root@master ~]# k0s install controller 
INFO[2021-03-05 15:54:29] no config file given, using defaults         
INFO[2021-03-05 15:54:29] creating user: etcd                          
INFO[2021-03-05 15:54:30] creating user: kube-apiserver                
INFO[2021-03-05 15:54:30] creating user: konnectivity-server           
INFO[2021-03-05 15:54:30] creating user: kube-scheduler                
INFO[2021-03-05 15:54:30] Installing k0s service

启动 controller 服务:

[root@master ~]# systemctl start k0scontroller

服务启动后,检查下运行状态:

服务运行正常,接下来生成一个 token 文件供 worker 连接:

# 出于安全考虑,这里设置了 token 的过期时间
[root@master ~]# k0s token create --role=worker --expiry=100h > token-file

将 token 文件复制到 worker 主机上:

[root@master ~]# scp token-file 192.168.128.132:/opt/k0s/

至此,master 节点部署完成,接下来登录 worker 节点。

worker

在 worker 主机上安装 worker 服务,并指定刚复制的 token 文件,:

[root@worker ~]# k0s install worker --token-file /opt/k0s/token-file 
INFO[2021-03-05 16:19:41] Installing k0s service 

启动服务并确保运行正常:

[root@worker ~]# systemctl start k0sworker

至此,所有的部署工作均已完成。

使用示例

接下来,我准备创建一个 Deployment 来测试集群是否可用。在创建前,需要检查下当前集群的状态。

回到 master 节点,首先检查下节点的状态。需要注意:如果节点没有加入或者处于 Not Ready,会导致 pod 一直处于 pending 状态:

[root@master ~]# k0s kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
worker   Ready    <none>   8m32s   v1.20.4-k0s1

可以看到,worker 节点已加入并处于就绪状态,再检查下 kube-system 中 pod 的运行情况:

[root@master ~]# k0s kubectl get pods -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-5f6546844f-9fjhp   1/1     Running   0          37m
calico-node-rnjnl                          1/1     Running   0          12m
coredns-5c98d7d4d8-xw6lw                   1/1     Running   0          38m
konnectivity-agent-xkcjh                   1/1     Running   0          10m
kube-proxy-hfcc9                           1/1     Running   0          12m
metrics-server-6fbcd86f7b-tc9kg            1/1     Running   0          37m

各 pod 均处于 Runing 状态,说明集群服务运行正常。接下来,试试通过 yaml 文件创建一个 nginx 应用。

[root@master ~]# cat nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
[root@master ~]# k0s kubectl create -f nginx.yaml 
deployment.apps/nginx-deployment created

查看 nginx 的运行情况,应用已启动,,说明集群可用:

[root@master ~]# k0s kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   1/1     1            1           46s

写在最后

官方将这个项目命名为 k0s,这可不是乱取的啊,显然是有备而来。k0s 中的 0 包含三层含义:

  • 零摩擦:轻量并保留所有 K8s 的功能,尽可能降低安装和使用的复杂性。
  • 零依赖:集成所有 K8s 组件,无需安装其它依赖。
  • 零成本:二进制文件部署,适合非专业用户使用。

如文中演示,k0s 部署方便,使用简单,即使是没有经验的用户,在数分钟内也可以创建一套 Kubernetes 集群。

References

[1] k0s: https://github.com/k0sproject/k0s
[2] 官方文档: https://docs.k0sproject.io/latest/

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐