编写Dockerfile:
FROM openjdk:8
COPY springboot-demo-0.0.1-SNAPSHOT.jar /springboot-demo.jar
ENTRYPOINT ["java","-jar","/springboot-demo.jar"]
docker build -t springboot-demo-image:v1.0 .
可以将镜像上传到阿里云镜像库中
apiVersion: apps/v1
kind: Deployment
metadata:
name: blog-dep
spec:
selector:
matchLabels:
app: blog
replicas: 1
template:
metadata:
labels:
app: blog
spec:
imagePullSecrets:
- name: blog
containers:
- name: blog #pod 名
#项目的镜像文件
image: registry.cn-hangzhou.aliyuncs.com/chenguanghu/cgh:springboot-demo-image
ports:
- containerPort: 8080 #容器内部端口
---
# 创建Pod的Service 将容器8080端口映射到node外部访问端口30080 (nodePort端口范围:30000~)
apiVersion: v1
kind: Service
metadata:
name: blog-service
spec:
type: NodePort #
ports:
- port: 8080 #service端口
protocol: TCP
targetPort: 8080 #pod端口,集群内部访问端口
nodePort: 30080 #node端口 外部访问端口
selector:
app: blog
---
port是k8s集群内部访问service的端口(service暴露在Cluster IP上的端口),即通过clusterIP:port可以访问到某个service
nodePort是外部访问k8s集群中service的端口,通过 nodelP:nodePort 可以从外部访问到某个service. 该端口号的范围是 kube-apisever 的启动参数 -serice-node-pont-ange 指定的,在当前测试环境中其值是 30000-500。表示只允许分配30000-50000之间的端口.
targetPort是pod的端口,从port和nodePor来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器
containerPort是pod内部容器的端口,targetPort映射到containerPort。
kubectl apply -f springboot-demo.yaml
#验证:
使用nodeip:30080 访问
常用命令:
kubectl get pods -o wide #查看pod列表
kubectl get nodes -o wide #查看node列表
kubectl get services #查看service列表
kubectl get deployment #查看deployment列表
kubectl delete <资源类型> <资源名称> #删除指定资源。
kubectl delete pod <pod-name> #删除指定pod
#强制删除 pod
kubectl delete pod <pod-name> -n <命令空间> --force --grace-period=0
kubectl delete service <service-name> #删除指定 service。
#删除指定命令空间下所有的 pod;pods 改为 services 即为删除所有的 services
kubectl delete pods --all -n <命名空间>
kubectl exec -it <pod-name> --bash #登录容器
kubectl logs -f <Pod 名称> #查看pod日志