什么是 Kubernetes

我们都知道Docker容器,但是在生产环境中,仅仅有Docker还不够。当遇到应用自动化部署、容器伸缩和管理等问题时,我们需要一个容器编排系统。Kubernetes就是一个生产级的容器编排系统。

Kubernetes 基础

Pod:最小运行单元,由一个或多个容器组成
Deployment:常用的控制器
Service:用于服务注册、服务发现,作用域主要为 K8S 集群内部
Ingress:提供外部访问入口

从哪里获取 Kubernetes 集群

Kubernetes 集群可以自己搭建,也可以直接从云服务商购买。自行搭建较为复杂,且运维工作也会很复杂,使用云服务商的Kubernetes集群较为方便。

比较有名的Kubernetes提供商有:AzureAWSGCP、阿里云

上面这几家都是云计算大厂,稳定性更好,但是价格也会很高。

相对便宜的云服务可以选择:DigitalOceanLinode

编写 Snell 部署所需的资源配置文件

  1. 编写 ConfigMap 用于存储配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: ConfigMap
metadata:
name: snell-server-config
namespace: stage
labels:
app: surge-snell
data:
snell-server.conf: |-
[snell-server]
listen = 0.0.0.0:10000
psk = password
obfs = http
  1. 编写 DeploymentService 资源配置
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
51
52
53
54
55
56
57
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: snell-server
namespace: stage
labels:
app: surge-snell
spec:
replicas: 2
revisionHistoryLimit: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
selector:
matchLabels:
app: snell-server
template:
metadata:
labels:
app: snell-server
spec:
containers:
- name: snell-server
image: vermouthx/surge-snell:2.0.1
command: ["snell-server", "-c", "/etc/snell/snell-server.conf"]
volumeMounts:
- name: snell-config
mountPath: /etc/snell
resources:
limits:
memory: "128Mi"
cpu: "100m"
ports:
- containerPort: 10000
volumes:
- name: snell-config
configMap:
name: snell-server-config
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: snell-service
namespace: stage
labels:
app: surge-snell
spec:
selector:
app: snell-server
ports:
- protocol: TCP
port: 10000
targetPort: 10000
  1. 使用 kubectl 创建上述资源
1
kubectl apply -f /path/to/resource

配置 Nginx Ingress

安装 Nginx Ingress

配置 TCP 端口转发