[root@node1 redis]# pwd
/home/summer/redis
[root@node1 redis]# mkdir -p /home/summer/redis/data
[root@node1 redis]# chmod -R 777 /home/summer/redis/data
[root@master redis]# ll
总用量 8
drwxrwxrwx 2 root root 24 1月 4 14:41 conf
drwxrwxrwx 2 root root 6 1月 4 14:46 data
-rwxrwxrwx 1 root root 1558 1月 4 14:48 pod.yml
-rwxrwxrwx 1 root root 202 1月 4 14:48 service.yml
[root@master redis]# cd conf/
[root@master conf]# ll
总用量 4
-rwxrwxrwx 1 root root 57 1月 4 14:41 redis.conf
[root@master conf]# cat redis.conf
port 6379
timeout 3000
tcp-keepalive 0
databases 99
点击查看
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
labels:
app: redis
annotations:
security.alpha.kubernetes.io/unsafe-sysctls: net.core.somaxconn=65535
spec:
#securityContext:
#privileged: true
serviceName: redis
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
#net:
#core:
#somaxconn=511:
spec:
containers:
- name: redis
image: redis:5.0.6
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: 450m
memory: 4000Mi
requests:
cpu: 400m
memory: 4000Mi
env:
- name: TZ
value: Asia/Shanghai
command: ["redis-server","/usr/local/etc/redis/redis.conf","--appendonly yes"]
# lifecycle:
# postStart:
# exec:
# command: ["/bin/bash", "-c", "echo 511 > /proc/sys/net/core/somaxconn; echo never > /sys/kernel/mm/transparent_hugepage/enabled;"]
ports:
- containerPort: 6379
volumeMounts:
- name: vol-conf
mountPath: /usr/local/etc/redis
- name: vol-data
mountPath: /data
volumes:
- name: vol-conf
hostPath:
path: /home/summer/redis/conf
type: Directory
- name: vol-data
hostPath:
path: /home/summer/redis/data
type: Directory
点击查看
apiVersion: v1
kind: Service
metadata:
name: redis
labels:
app: redis
spec:
type: NodePort
ports:
- port: 6379
targetPort: 6379
nodePort: 30379
selector:
app: redis
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
[root@master redis]# kubectl create -f /home/summer/redis/service.yml
[root@master redis]# kubectl create -f /home/summer/redis/pod.yml
1 2
[root@master conf]# kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-0 1/1 Running 0 2m40s
[root@master conf]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5h28m
redis NodePort 10.110.14.232 <none> 6379:30379/TCP 10m
此时用RedisDesk工具连接集群任意节点ip:30379验证即可
这里注意由于k8s随机分配pod在任意node,应在每个node上都创建data/conf目录
比如这里查看pod创建报错信息发现此pod被分配到了node1,但是之前我只在master上创建了data/conf目录
点击查看
[root@master redis]# kubectl describe pod redis-0
Name: redis-0
Namespace: default
Priority: 0
Node: node1/192.168.0.96
Start Time: Mon, 04 Jan 2021 14:50:58 +0800
Labels: app=redis
controller-revision-hash=redis-56b6778b6
statefulset.kubernetes.io/pod-name=redis-0
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Controlled By: StatefulSet/redis
Containers:
redis:
Container ID:
Image: redis:5.0.6
Image ID:
Port: 6379/TCP
Host Port: 0/TCP
Command:
redis-server
/usr/local/etc/redis/redis.conf
--appendonly yes
State: Waiting
Reason: ContainerCreating
Ready: False
Restart Count: 0
Limits:
cpu: 450m
memory: 4000Mi
Requests:
cpu: 400m
memory: 4000Mi
Environment:
TZ: Asia/Shanghai
Mounts:
/data from vol-data (rw)
/usr/local/etc/redis from vol-conf (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-xmbb9 (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
vol-conf:
Type: HostPath (bare host directory volume)
Path: /home/summer/redis/conf
HostPathType: Directory
vol-data:
Type: HostPath (bare host directory volume)
Path: /home/summer/redis/data
HostPathType: Directory
default-token-xmbb9:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-xmbb9
Optional: false
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned default/redis-0 to node1
Warning FailedMount 14s (x7 over 46s) kubelet, node1 MountVolume.SetUp failed for volume "vol-data" : hostPath type check failed: /home/summer/redis/data is not a directory
Warning FailedMount 14s (x7 over 46s) kubelet, node1 MountVolume.SetUp failed for volume "vol-conf" : hostPath type check failed: /home/summer/redis/conf is not a directory
[root@master redis]# ll