使用minikube
准备
- 安装过程略 minikube.sigs.k8s.io/docs/start/
- 准备使用自己制作的镜像,代码如下,过程参考 juejin.cn/post/726669…
@RestController
public class UserController {
private AtomicLong currentCount = new AtomicLong();
@GetMapping("view")
public String viewCount() {
String currentShow = "<h1>当前访问次数:" + currentCount.incrementAndGet() + "</h1>";
String message;
try {
InetAddress addr = InetAddress.getLocalHost();
message = addr.getHostName() + "-" + addr.getHostAddress();
} catch (UnknownHostException e) {
message = "error";
}
return currentShow + "\n" + message;
}
}
- 启动minikube:minikube start --driver=docker --force
- 构建镜像到minikube docker
minikube image build -t docker-test-mini:latest /data/my-docker-images/ ,这里的路径是我存放dockerfile的位置
进入minikube docker查看是否已有镜像
使用yaml创建pod
- 创建mypod.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: docker-test-mini:latest
ports:
- containerPort: 8090
2.应用配置文件,并查看pod(status为创建中...)
再次查看pod状态(pull镜像失败)
查看详细信息 kubectl describe pod my-pod
显示拉取镜像失败,我使用的自己制作的镜像,所以改一下mypod.yaml配置文件,不去拉镜像
删除my-pod,再次apply一下,可以了,status为running
使用yaml创建deployment
- 创建mydeployment.yaml文件
apiVersion: apps/v1 # 使用的 Kubernetes API 版本
kind: Deployment # 创建的资源类型为 Deployment
metadata:
name: my-deployment # Deployment 的名称
spec:
replicas: 3 # 指定 Deployment 的副本数为 3
selector:
matchLabels:
app: my-app # 用于选择关联的 Pod 的标签
template:
metadata:
labels:
app: my-app # Pod 模板的标签,与上面的选择器匹配
spec:
containers:
- name: my-container # 容器的名称
image: docker-test-mini:latest # 容器使用的镜像
imagePullPolicy: Never
ports:
- containerPort: 8090 # 容器内部的端口号
2.应用文件,查看deployment,查看pod
查看程序日志
进入第一个pod,请求程序接口
请求其他两个pod也是可以的
3.动态修改mydeployment.yaml文件中副本数量为2,可以看到第一个pod正在停止,再次查看,已经关闭
使用service访问pod
- 创建myservice.yaml文件
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- port: 8090
targetPort: 8090
type: ClusterIP
2.应用文件,查看service信息,Endpoints对应两个pod
3.当前文件使用的是type: ClusterIP,只能集群内访问,因此进入某个pod,使用上图中的service ip,可以看到负载到两个pod上
4.通过nodePort的方式把服务暴露给集群外部访问,复制myservice.yaml文件为myservice_nodeport.yaml,修改type并应用
直接使用minikube ip来访问