搭建一个api和一个mysql服务/一个redis服务,能够接收数据并存在数据库中,数据需要支持持久化。
基本知识概念点:配置,ConfigMap,卷,持久卷
完成项目:https://gitee.com/open_source/k8s_info

搭建环境

minikube — 参照单节点部署文档

mysql服务

mysql-rc.yaml

  1. apiVersion: v1
  2. kind: ReplicationController
  3. metadata:
  4. name: mysql-rc
  5. labels:
  6. name: mysql-rc
  7. spec:
  8. replicas: 1
  9. selector:
  10. name: mysql-pod
  11. template:
  12. metadata:
  13. labels:
  14. name: mysql-pod
  15. spec:
  16. containers:
  17. - name: mysql
  18. image: mysql
  19. imagePullPolicy: IfNotPresent
  20. ports:
  21. - containerPort: 3306
  22. env:
  23. - name: MYSQL_ROOT_PASSWORD
  24. value: "mysql"

mysql-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
  labels: 
    name: mysql-svc
spec:
  type: NodePort
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
    name: http
    nodePort: 31306
  selector:
    name: mysql-pod

Redis服务

redis-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
     app: redis-deploy
  template:
    metadata:
     labels:
       app: redis-deploy
    spec:
     containers:
     - name: redis-deploy
       image: redis
       volumeMounts:
       - name: foo
         mountPath: "/usr/local/etc"
       command:
         - "redis-server"
       args:
         - "/usr/local/etc/redis/redis.conf"
     volumes:
     - name: foo
       configMap:
         name: redis-demo
         items:
           - key: redis.conf
             path: redis/redis.conf

redis-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: redis
  labels:
    name: redis
spec:
  type: NodePort
  ports:
  - port: 6379
    targetPort: 6379
    name: redis-deploy
    nodePort: 31380
  selector:
    app: redis-deploy

redis.conf

#daemonize yes
pidfile /data/redis.pid
port 6379
tcp-backlog 30000
timeout 0
tcp-keepalive 10
loglevel notice
logfile /data/redis.log
databases 16
#save 900 1
#save 300 10
#save 60 10000
stop-writes-on-bgsave-error no
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass ibalife
maxclients 30000
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events KEA
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 1000
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10

Java Application

java-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-demo
spec:
  replicas: 1
  selector:
    matchLabels:
     app: k8s-demo
  template:
    metadata:
     labels:
       app: k8s-demo
    spec:
     containers:
     - name: k8s-demo
       image: 192.168.216.3/k8s/k8s-demo:v1.0.0   # 镜像地址

java-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: k8s-demo
  labels:
    name: k8s-demo
spec:
  type: NodePort
  ports:
  - port: 8099
    targetPort: 8099
    name: redis-deploy
    nodePort: 31199
  selector:
    app: k8s-demo

将java项目打包成镜像,发布至私服

# 打包
mvn clean package -Dmaven.test.skip=true --update-snapshots

# 登录
docker login  -u admin -p Harbor12345 http://xxx.xx.xx.xx

# 容器发版
docker tag eureka-server 192.168.216.3/t/eureka-server

# 将容器上传至私服
docker push 192.168.216.3/xxxx/eureka-server