目录
一、环境安装
参考
【Kubernetes高阶】Linux安装 KubeSphere
二、涉及到的组件
1、ConfigMap
相关使用知识参考:
【Kubernetes实战】(二十)数据存储 ConfigMap
2、Service
本实战用headless service。
简单的说,Headless Service 就是没有指定 Cluster IP 的 Service,相应的,在 k8s 的 dns 映射里,Headless Service 的解析结果不是一个 Cluster IP,而是它所关联的所有 Pod 的IP列表
相关使用知识参考:
【Kubernetes实战】(十六)Service 对外提供访问相关命令
3、StatefulSet
StatefulSet
是 k8s 中专门用于解决有状态应用部署的一种资源,总的来说可以认为它是 Deployment/RC
的一个变种。
相关使用知识参考:
【Kubernetes实战】(二十四)Pod 控制器StatefulSet相关命令
三、实战
1、yml文件
statefulset-redis.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-conf
data:
redis.conf: |
bind 0.0.0.0
port 6379
requirepass 1qaz2wsx.
pidfile .pid
appendonly yes
cluster-config-file nodes-6379.conf
pidfile /data/k8s/mnt/redis/log/redis-6379.pid
cluster-config-file /data/k8s/mnt/redis/conf/redis.conf
dir /data/k8s/mnt/redis/data/
logfile "/data/k8s/mnt/redis/log/redis-6379.log"
cluster-node-timeout 5000
protected-mode no
---
kind: Service
apiVersion: v1
metadata:
labels:
name: redis
name: redis
spec:
type: NodePort
ports:
- name: redis
port: 6379
targetPort: 6379
nodePort: 30020
selector:
name: redis
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
spec:
replicas: 3
serviceName: redis
selector:
matchLabels:
name: redis
template:
metadata:
labels:
name: redis
spec:
initContainers:
- name: init-redis
image: busybox
command: ['sh', '-c', 'mkdir -p /data/k8s/mnt/redis/log/;mkdir -p /data/k8s/mnt/redis/conf/;mkdir -p /data/k8s/mnt/redis/data/']
volumeMounts:
- name: data
mountPath: /data/k8s/mnt/redis/
containers:
- name: redis
image: redis:5.0.8
imagePullPolicy: IfNotPresent
command:
- sh
- -c
- "exec redis-server /data/k8s/mnt/redis/conf/redis.conf"
ports:
- containerPort: 6379
name: redis
protocol: TCP
volumeMounts:
- name: redis-config
mountPath: /data/k8s/mnt/redis/conf/
- name: data
mountPath: /data/k8s/mnt/redis/
volumes:
- name: redis-config
configMap:
name: redis-conf
- name: data
hostPath:
path: /data/k8s/mnt/redis/
2、创建
kubectl create -f statefulset-redis.yaml -n dev
3、查看所有服务
kubectl get all -n dev
4、测试
因为是用service的NodePort暴露的端口,所以外部 通过 Ip:30020 端口进行访问。
redis-cli -h hadoop101 -p 30020
查看本地文件目录: