0%

kubernetes部署Nginx集群

前言

在之前的博客kubernetes集群部署中,我们搭建了一个kubernetes集群,由1个master节点和3个worker节点组成;在本文中我们在这个kubernetes集群中部署一个Nginx集群。

部署

创建 Namespace

Namespace 是 Kubernetes 中用于资源隔离的逻辑分区,我们为nginx集群创建一个独立的namespace

1
kubectl create namespace nginx-namespace

创建 ConfigMap

ConfigMap 用于将非敏感配置数据(如环境变量、配置文件)与容器镜像解耦,使应用程序的配置更加灵活;

在合适的目录创建文件夹‘kubernetes/nginx’,然后创建nginx-config.yml文件,完整的 nginx-config.yml 文件如下:

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
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
namespace: nginx-namespace
data:
nginx.conf: |
# 你的 Nginx 配置文件内容
user nginx;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}

应用文件创建configmap

1
kubectl apply -f nginx-config.yml

我们部署nginx后,要修改nginx的配置就可以在这个文件中修改,修改配置信息后,可以滚动重启Deployment

1
kubectl rollout restart deployment nginx-deployment -n nginx-namespace

创建 Deployment

Deployment 用于管理和部署无状态应用程序,支持滚动更新、回滚和 Pod 的自动扩缩容;一个常见的 deployment 配置包括几个部分:

  • spec.selector:用于定义 deployment 如何查找要管理的 pod,例如,使用在 pod 模板中定义的标签,如 app:nginx
  • spec.replicas:用于定义需要启动多少个副本
  • spec.template:用于定义 pod 的属性,例如,容器名称,容器镜像,labels 字段,等

更详细可以参考官网,在合适的目录创建文件夹‘kubernetes/nginx’,然后创建nginx-dep.yml文件,完整的 nginx-dep.yml 文件如下:

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
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: nginx-namespace
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
volumeMounts:
- name: nginx-config-volume
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
volumes:
- name: nginx-config-volume
configMap:
name: nginx-config

使用文件创建Deployment

1
kubectl apply -f nginx-dep.yml

查看创建的Deployment

1
kubectl get deployment -n redis-namespace

创建 Service

Service 用于定义一组 Pod 的访问策略,提供稳定的网络端点(IP 和端口),使外部或其他服务可以访问这些 Pod,我们创建一个Service来用于nginx集群的网络访问,在合适的目录创建文件夹‘kubernetes/nginx’,然后在其中创建文件‘nginx-svc.yml’,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: nginx-namespace
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
# kubernetes允许的端口号默认为30000~32767
nodePort: 30080
type: NodePort

使用文件创建Service

1
kubectl apply -f nginx-svc.yml

查看创建的Service

1
kubectl get service -n redis-namespace

部署完成

现在我们使用kubernetes集群中的任意节点的ip和nginx-svc.yml中设置的nodePort,就可以访问已经部署的nginx