minikube 用于在本地运行 kubernetes 环境,用来开发和测试。
导出 minikube 的 kubeconfig
1
2
|
kubectl config view --minify --raw > ~/minikube-config.yaml
mount local dir
|
https://kubernetes.io/zh-cn/docs/concepts/configuration/organize-cluster-access-kubeconfig/
将本地文件挂载到 minikube 环境
1
2
|
minikube mount /Users/ynthm/workspace/project-demo:/app/project-demo
minikube mount /Users/ynthm/.m2:/root/.m2 &
|
Java 镜像
Dockerfile
1
2
|
FROM maven:3.8.5-openjdk-17
CMD /app/project-demo/docker-run.sh
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/usr/bin/env bash
debug=true
VAULT_ADDR="http://192.168.19.87:18202"
JVM_DEBUG_PORT="15002"
if $debug; then
jvmDebugArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$JVM_DEBUG_PORT"
fi
echo $jvmDebugArguments
cd ~/auth && java -XX:+UseZGC -Xlog:gc -Xms256M -Xmx512M $jvmDebugArguments -jar /app/project-demo/target/app-1.0.17.jar --spring.profiles.active=local --spring.cloud.vault.url="$VAULT_ADDR"
|
1
2
3
4
|
eval $(minikube docker-env)
# 在当前终端窗口中使用。这将为当前会话使用 minikube docker-env。
# 镜像需要在 minikube 虚拟机上。所以现在你需要再次构建你的图像。
docker build -t hot-reload-java .
|
1
2
3
4
|
minikube image ls
minikube image pull maven:3.8.5-openjdk-17
# 有 Dockerfile 的地方才能执行
minikube image build -t hot-reload-java .
|
serviceaccount
1
2
3
4
|
kubectl create sa hot-reload-serviceaccount
kubectl describe sa hot-reload-serviceaccount
code hot-reload-role.yaml
|
1
2
3
4
5
6
7
8
9
10
11
12
|
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: hot-reload-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["extensions", "apps"]
resources: ["deployments"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
|
1
2
3
4
|
kubectl create -f hot-reload-role.yaml
kubectl describe role hot-reload-role
code hot-reload-role-binding.yaml
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
creationTimestamp: null
name: hot-reload-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: hot-reload-role
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: hot-reload-serviceaccount
|
1
2
3
4
|
kubectl create -f hot-reload-role-binding.yaml
kubectl describe RoleBinding hot-reload-role-binding
vim hot-reload-configmap.yaml
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
apiVersion: v1
kind: ConfigMap
metadata:
name: game-demo
data:
# property-like keys; each key maps to a simple value
player_initial_lives: "3"
ui_properties_file_name: "user-interface.properties"
# file-like keys
game.properties: |
enemy.types=aliens,monsters
player.maximum-lives=5
user-interface.properties: |
color.good=purple
color.bad=yellow
allow.textmode=true
|
1
2
3
|
kubectl create configmap hot-reload-configmap --from-file=hot-reload-configmap.yaml
code deployment.yaml
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: hot-reload-deployment
spec:
selector:
matchLabels:
app: hot-reload
replicas: 1
template:
metadata:
labels:
app: hot-reload
spec:
containers:
- envFrom:
- configMapRef:
name: hot-reload-configmap
name: hot-reload-java
image: hot-reload-java
imagePullPolicy: Never
ports:
- containerPort: 8080
- containerPort: 15002
volumeMounts:
- mountPath: /root/auth
name: app-path
- mountPath: /root/.m2
name: maven-path
serviceAccount: hot-reload-serviceaccount
serviceAccountName: hot-reload-serviceaccount
volumes:
- name: app-path
hostPath:
path: /root/auth
- name: maven-path
hostPath:
path: /root/.m2
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
kubectl apply -f deployment.yaml
kubectl get deployment
kubectl describe deploy hot-reload-deployment
kubectl delete deployment hot-reload-deployment
# 查看 ReplicaSet
kubectl get rs
kubectl describe rs hot-reload-deployment-74cbbbf648
# 查看 Pod
kubectl get po
kubectl logs -f hot-reload-deployment-74cbbbf648-mjvjp
kubectl delete pod hot-reload-deployment-74cbbbf648-mjvjp
|