Lighthouse K3s 初体验
【5分钟玩转Lighthouse】系列文章将为大家分享轻量应用服务器使用教程,提供丰富的实践指南,帮助大家快速上手并获得最佳产品体验。本期主要介绍如何使用 Lighthouse K3s 部署、管理您的应用。
背景概述
K3s 简介
Legacy and non-default features
Alpha features
In-tree cloud providers
In-tree Storage
Docker (optional)
Simplified installation
SQLite3 support in addition to etcd
TLS management
Automatic Manifest and Helm Chart management
containerd、CoreDNS、Flannel
K3s 中包含了我们所熟悉的 kubernetes 的各个组件,为了能做到 "Simplified installation”, K3S 将所有组件都集成在一个二进制包中(<100MB),此外默认安装 Flannel 作为 CNI plugin,替换 docker 使用更为轻量级、底层的 containerd,以及使用 SQLite3 替换 etcd 作为元数据的存储等。
通过上述裁剪以及优化,K3s 不仅免去了 Kubernetes 安装环节的复杂、繁琐步骤,为用户提供了开箱即用的部署体验,还可以在资源有限环境下,仍能为用户提供良好运行的 Kubernetes 集群,保持了与 Kubernetes 一致的使用体验。
环境准备
地域:中国香港
镜像:应用镜像 K3s
实例套餐:CPU 1核 内存2GB 系统盘 50GB SSD 峰值带宽 30Mbps 每月流量 2048GB
实例名称:输入 K3s 即可
点击「立即购买」,付款之后服务器就开始创建了。当服务器状态为运行中时,我们就可以使用了。
防火墙配置
默认 Kubernetes-dashboard 监听在 9090 端口,因此,我们需要在防火墙开通 9090 端口的访问。在「应用管理」页,Lighthouse 也为用户提供了操作指引:
点击「确定」,至此,用户便可访问图中所示访问地址访问 Kubernetes-dashboard 了。
输入 dashboard token
Kubernetes-dashboard 的登录需要用户提供 token,而 token 需要登录到服务器内部才能获取。点击下图中所示「登录」按钮,一键登录至服务器,点击复制 「dashboard-token」,在服务器中运行,输出即为所需的登录 token,复制并粘贴至上图「Enter token」输入框里。
点击 Sign In 按钮,登录成功!
至此用户便可以使用 Kubernetes-dashboard 部署及管理应用了。
部署应用
下面将展示如何在 K3s 上部署 Wordpress,访问 Kubernetes-dashboard,点击右上角 "+":
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
tier: frontend
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
labels:
app: wordpress
annotations:
volume.beta.kubernetes.io/storage-provisioner: rancher.io/local-path
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:4.8-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wp-pv-claim
---
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
livenessProbe:
tcpSocket:
port: 3306
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
---
apiVersion: v1
kind: Secret
metadata:
name: mysql-pass
data:
password: MWYyZDFlMmU2N2Rm
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: "traefik"
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: wordpress
servicePort: 80
我们创建了 mysql、wordpress 两个 Deployment,还创建了对应的 Service,mysql 所需要的 password 通过 secret 提供,在部署前,用户可以修改 Secret 填入自定义的 password。
得益于 K3s 默认提供的 local-path-provisioner,用户可以创建 PVC(默认 storageclass 已被指定为 local-path),local-path-provisioner 会动态创建对应的 PV。需要注意的是在 PVC 的 annotations 中需要加入 volume.beta.kubernetes.io/storage-provisioner: rancher.io/local-path。
K3s 应用镜像中默认安装了网关 Traefik,方便用户将服务暴露出去,更详细的配置可以参见 traefik docs。
点击 Upload 开始部署,等待部署完成。
访问 http://${实例公网 IP}/ 进入 Wordpress 管理界面:
修改 resources 配置,点击「Update」按钮,Kubernetes 将会更新/升级 Deployment,需要补充的是:
Kubernetes 升级的策略取决于 Deployment 指定的 strategy,上述 Deployment 指定的 strategy 为 recreate,所以 Kubernetes 会先关闭旧版本,再去启动新版本,用户可以根据需求自行指定 strategy,详情参考 Deployment update strategy。
配置 resources 保证 limits == requests,Kubernetes 将会设置对应 Pod 的 Qos Class 为 Guaranteed,这样对于关键服务,尤其是在机器资源紧张时,可以保证其服务质量,详情可以参加 Qos Class。
总结
本文展示了 Lighthouse K3s 应用镜像的使用方法,并通过 Wordpress 的应用部署示例,展示了如何使用 Kubernetes-dashboard 部署、管理应用。
如果您想要一个快速且简单的 Kubernetes 环境,用来学习 Kubernetes,或者用来开发、测试、部署应用,轻量应用服务器 Lighthouse (K3s 应用镜像)都将会非常适合您!快来试一下吧!