部署脚本
apiVersion: v1 kind: Service metadata: name: deploy-redis-svc namespace: deploy-test labels: app: redis spec: ports: - port: 6379 name: redis targetPort: 6379 nodePort: 30379 selector: app: redis type: NodePort sessionAffinity: ClientIP --- apiVersion: apps/v1 kind: StatefulSet metadata: name: deploy-redis namespace: deploy-test spec: selector: matchLabels: app: redis # 必须匹配 .spec.template.metadata.labels serviceName: "deploy-redis-svc" replicas: 1 template: metadata: labels: app: redis # 必须匹配 .spec.selector.matchLabels spec: terminationGracePeriodSeconds: 10 containers: - command: - "redis-server" - "/usr/local/etc/redis.conf" name: redis image: redis:5.0.14 ports: - containerPort: 6379 name: redis volumeMounts: - name: redis-data mountPath: /data - name: redis-config mountPath: /usr/local/etc readOnly: true volumes: - name: redis-data persistentVolumeClaim: claimName: deploy-redis-nfs-pvc - name: redis-config configMap: name: deploy-redis-config items: - key: redis.conf path: redis.conf
接下来讲解一下里面比较重要的脚本
挂载数据目录
在 StatefulSet.spec.template.spec.volumes 当中有那么一串代码:
- name: redis-data persistentVolumeClaim: claimName: deploy-redis-nfs-pvc
这串代码是要使用到 deploy-redis-nfs-pvc 这个pvc做数据存储,并给这个挂载取一个名字叫做 redis-data,然后在 StatefulSet.spec.template.spec.containers 有那么一串代码:
- name: redis-data mountPath: /data
这串代码的意思是使用名为 redis-data 数据挂载,并把它挂在到pod的 /data 目录当中
挂载配置文件
在 StatefulSet.spec.template.spec.volumes 当中有那么一串代码:
- name: redis-config configMap: name: deploy-redis-config items: - key: redis.conf path: redis.conf
这串代码的意思是读取 deploy-redis-config 这个configmap并命名为 redis-config,然后获取里面的 redis.conf 配置文件,命名为 redis.conf,然后在 StatefulSet.spec.template.spec.containers 有那么一串代码:
- name: redis-config mountPath: /usr/local/etc readOnly: true
这串代码的意思是使用名为 redis-config 配置文件,并把它以只读的方式挂在到pod的 /usr/local/etc 当中
通过指定的配置文件启动redis
在 `StatefulSet.spec.template.spec.containers当中有这么一行代码:
- command: - "redis-server" - "/usr/local/etc/redis.conf"
这行代码的意思是使用 /usr/local/etc/redis.conf 配置文件启动redis,这个配置文件是我们在configmap当中配置的,当我们执行部署的这个yaml之后,可以查看结果:
执行一下命令查看部署进度:
kubectl get all -o wide -n deploy-test
看到这个就代表部署完成了:
集群内部访问
StatefulSet应用的访问地址为:
<pod名称>.<service名称>.<命名空间名称>.svc.cluster.local
那么这次暴露的pod访问地址就是:
deploy-redis-0.deploy-redis-svc.deploy-test.svc.cluster.local
尝试解析验证一下:
外部链接Redis
我们可以直接使用 IntelliJ IDEA 或其他链接工具尝试链接:
显示链接成功(如果有密码注意输入密码):
并且操作也没问题:
我们来到数据目录,查看容器内的数据已经成功暴露到nfs的目录当中:
到这里在Kubernetes上安装redis就已经完成了!