创建一个文件 mysite.yaml
,其内容如下:
-
apiVersion: apps/v1
-
kind: Deployment
-
metadata:
-
name: mysite-nginx
-
labels:
-
app: mysite-nginx
-
spec:
-
replicas: 1
-
selector:
-
matchLabels:
-
app: mysite-nginx
-
template:
-
metadata:
-
labels:
-
app: mysite-nginx
-
spec:
-
containers:
-
- name: nginx
-
image: nginx
-
ports:
-
- containerPort: 80
其中大部分是样板。重要的部分,我们会将该部署命名为 mysite-nginx
,并为其加上同名的 app
标签。我们指定了一个副本,这意味着将只创建一个 Pod。我们还指定了一个容器,我们将其命名为 nginx
。我们将镜像指定为 nginx
。这意味着在部署时,k3s 将从 DockerHub 下载 nginx
镜像并从中创建一个 Pod。最后,我们指定了容器端口为 80
,这只意味着在容器内部 Pod 会监听 80
端口。
我在上面强调了“在容器内部”,因为这是一个重要的区别。由于我们是按容器配置的,因此只能在容器内部访问它,并且进一步将其限制为内部网络。这对于允许多个容器在同一容器端口上监听所是必要的。换句话说,通过这种配置,其他一些 Pod 也可以在其容器端口 80 上侦听,并且不会与此容器冲突。为了提供对该 Pod 的正式访问权限,我们需要一个服务配置。
服务配置
在 Kubernetes 中,服务是一种抽象。它提供了一种访问 Pod 或 Pod 集合的方法。当连接到服务时,服务会路由到单个 Pod,或者如果定义了多个 Pod 副本,会通过负载均衡路由到多个 Pod。
可以在同一配置文件中指定该服务,这就是我们将在此处要做的。用 ---
分隔配置区域,将以下内容添加到 mysite.yaml
中:
-
---
-
apiVersion: v1
-
kind: Service
-
metadata:
-
name: mysite-nginx-service
-
spec:
-
selector:
-
app: mysite-nginx
-
ports:
-
- protocol: TCP
-
port: 80
在此配置中,我们将服务命名为 mysite-nginx-service
。我们提供了一个选择器:app: mysite-nginx
。这是服务选择其路由到的应用程序容器的方式。请记住,我们为容器提供了 app
标签:mysite-nginx
。这就是服务用来查找我们的容器的方式。最后,我们指定服务协议为 TCP
,在端口 80
上监听。