使用k3s,五分钟配置一套Kubernetes集群来玩

想必很多初学者都被Kubernetes的各种概念绕晕过,今天我们扔掉理论,直接上手,尝试用5分钟构建一套简单的Kubernetes集群来玩。

用到的相关技术栈如下:

  • K3s
  • Helm
  • Traefik
  • echo-server

服务器准备

假设已经准备好了两台 Ubuntu Server 18.04 虚拟机,分别为Server1和Agent1,最低配置需求为1核CPU,1GB内存。

K3s 安装

K3s是Rancher出品的轻量级Kubernetes实现,易于配置和使用,非常适合我们练习。

服务端安装

进入Server1服务器终端,以此运行以下命令:

# 安装K3s服务
curl -sfL https://get.k3s.io | sh -

# 配置文件添加符号链接,方便其他项目访问
ln -s /etc/rancher/k3s/k3s.yaml ~/.kube/config

# 安装完之后,查看节点状态
kubectl get node

# 获取Token,用于下一步Agent服务配置
cat /var/lib/rancher/k3s/server/node-token

Agent端安装

进入Agent1服务器终端,以此运行以下命令:

# 安装
curl -sfL https://get.k3s.io | sh -

# 配置运行Agent,其中server1-ip替换成实际A服务器的实际IP,server1-token替换成上一步获取到的A服务器的Token
sudo k3s agent --server https://server1-ip:6443 --token server1-token

至此,完成了简单的集群的配置,可以再次在Server1服务器上查看节点状态,确保顺利。

kubectl get node

Helm 安装

Helm是Kubernetes的包管理方案。通过维护Helm Chart模板加values.yaml文件,,把Kubernetes的复杂配置封装起来,让用户可以专注实际需求,能够快速部署服务。

Helm 3是最新版本,相比之前版本,安装和使用也更加简单了。

再次进入Server1终端:

# 安装Helm
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

# 添加若干 Repo
helm repo add stable https://kubernetes-charts.storage.googleapis.com/

# 用于接下来的Echo-Server
helm repo add ealenn https://ealenn.github.io/charts

# 更新
helm repo update

echo-server 安装

最后一步,我们来安装一个简单的服务,用于验证我们的集群,这里选择的是echo-server,它能够返回你的Request的全部内容,在开发时可以用于调试请求。

创建echo-server-values.yaml文件,内容如下:

其中的<your-domain-name.com>部分,替换成实际的域名

replicaCount: 1
application:
  enable:
    environment: false
ingress:
  enabled: true
  hosts:
    - host: echo.test-k8s.com
      paths:
        - /

依然进入Server1终端:

helm install echo-server ealenn/echo-server -f echo-server-values.yaml

访问

因为我们没有实际绑定域名,所以需要通过修改本地电脑上的Hosts文件来访问,添加如下内容:

其中<server-1-ip>替换成Server1的实际IP

<server-1-ip> echo.test-k8s.com

然后就可以在浏览器中访问:

http://echo.test-k8s.com

[可选] 配置HTTPS服务

Traefik是一个现代的HTTP反向代理工具,更加适合容器内使用,配置也更友好,且集成了Let's Encrypt,可以自动申请免费的TLS证书。

K3s默认已经集成了Traefik,我们来更新到最新版,顺便修改一些配置,以用于生成TLS证书。

在Server1服务器中,创建traefik-values.yaml文件,内容如下:

replicas: 1
rbac:
  enabled: true
ssl:
  enabled: true
acme:
  enabled: true
  staging: false
  email: your-email@example.com

然后进入Server1终端:

# 升级traefik
helm upgrade traefik stable/traefik -f traefik-values.yaml -n kube-system