搭建一个api和一个mysql服务/一个redis服务,能够接收数据并存在数据库中,数据需要支持持久化。
基本知识概念点:配置,ConfigMap,卷,持久卷
完成项目:https://gitee.com/open_source/k8s_info
搭建环境
mysql服务
mysql-rc.yaml
apiVersion: v1kind: ReplicationControllermetadata:name: mysql-rclabels:name: mysql-rcspec:replicas: 1selector:name: mysql-podtemplate:metadata:labels:name: mysql-podspec:containers:- name: mysqlimage: mysqlimagePullPolicy: IfNotPresentports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: "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
