在 Kubernetes 集群中部署 Nginx

使用宿主机存储

  1. 创建副本控制器, ReplicationController 配置如下:
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx-test
  labels:
    name: nginx-test
spec:
  replicas: 2
  selector:
    name: nginx-test
  template:
    metadata:
      labels:
        name: nginx-test
    spec:
      containers:
        - name: nginx-test
          image: nginx
          volumeMounts:
            - mountPath: /usr/share/nginx/html # 挂载的目录
              name: nginx-data # 为挂载的目录取个名字
          ports:
            - containerPort: 80
      volumes:
        - name: nginx-data # 跟上面的名称对应
          hostPath: # 使用宿主机挂载
            path: /data # 宿主机挂载点
  1. 创建服务, 配置如下:
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    name: nginx-service
spec:
  type: NodePort
  ports:
    - port: 80
      protocol: TCP
      targetPort: 80
      name: http
      nodePort: 30088
  selector:
    name: nginx-test
  1. 在 dashboard 中查看

可以看到, 通过副本自动将 pod 分配到两个节点 k8s-node1k8s-node2

  1. 控制台查看
$ kubectl get rc -n test # 副本控制器
NAME         DESIRED   CURRENT   READY   AGE
nginx-test   2         2         2       21m
$ kubectl get po -n test # pods
NAME               READY   STATUS    RESTARTS   AGE
nginx-test-98bgp   1/1     Running   0          20m
nginx-test-pfv8d   1/1     Running   0          20m
$ kubectl get svc -n test # service
NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
nginx-service   NodePort   10.100.192.191   <none>        80:30088/TCP   14m
  1. 测试浏览器访问

在两台机子中分别录入一些数据:

k8s-node1$ echo 'Hello, Welcome to my website...' > /data/index.html

访问: http://192.168.126.129:30088/

使用 PVC 存储

以下示例, 演示在 k8s 中配置 nginx 网页文件使用 PVC 持久化存储

  1. 创建副本控制器, ReplicationController 配置如下:
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx-test
  labels:
    name: nginx-test
spec:
  replicas: 2
  selector:
    name: nginx-test
  template:
    metadata:
      labels:
        name: nginx-test
    spec:
      containers:
        - name: nginx-test
          image: nginx
          volumeMounts:
            - mountPath: /usr/share/nginx/html
              name: nginx-data
          ports:
            - containerPort: 80
      volumes:
        - name: nginx-data
          persistentVolumeClaim: # 指定使用的PVC
            claimName: nfs-data
  1. 创建服务, 配置如下:
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    name: nginx-service
spec:
  type: NodePort
  ports:
    - port: 80
      protocol: TCP
      targetPort: 80
      name: http
      nodePort: 30088
  selector:
    name: nginx-test
  1. 查看存储卷的路径

选择 PVC

选择 PV

找到 GlusterFS 中的路径

  1. 将 PV 挂载到宿主机

使用上面看到的路径, 将 PV 挂载到宿主机 /test1 路径下

$ mount -t glusterfs 172.18.50.200:vol_17fbf7ad28666ccbf55e4d6fe5d9a8d8 /test1/

其中 172.18.50.200 是宿主机(k8s-master)的 IP, 也可为其他 node 的 IP

  1. 往宿主机挂载点写点数据
  1. 进入到 pod 验证

看到, 在宿主机往 /test1 写入的数据, 进入 pod 依然能够看到

  1. 浏览器测试

参考资料

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress