配置应用到k8s,前置条件是安装了Docker,Minikube,kubectl
应用已经通过Docker生成本地镜像文件
1,创建godemo-deployment.yaml
java
apiVersion: apps/v1 #指定了使用的 Kubernetes API 版本
kind: Deployment #定义了这个配置文件描述的 Kubernetes 资源类型为 Deployment。
metadata: #包含了资源的元数据,比如名称等
name: godemo-deployment #指定了这个 Deployment 的名称为 "godemo-deployment"。
spec: #定义了 Deployment 的规格,包括副本数量、选择器和模板
replicas: 3 #启动三个副本
selector: #定义了用于选择 Pod 的标签
matchLabels: #指定了要匹配的标签,这里选择了标签为 "app: godemo" 的 Pod。
app: godemo
template: #定义了要创建的 Pod 的模板
metadata: #包含了 Pod 模板的标签
labels: #指定了 Pod 的标签为 "app: godemo"。
app: godemo
spec: #定义了 Pod 的规格,包括容器等
containers: #指定了要运行的容器
- name: godemo #指定了容器的名称为 "godemo"。
image: godemo:local #指定了要使用的容器镜像为 "godemo:local"。
ports: #指定了容器需要暴露的端口。
- containerPort: 7080 #指定了容器内部应用程序所使用的端口号为 7080。
resources: #定义了容器的资源限制。
limits:
memory: "512Mi" #内存限制
cpu: "1" #xpu限制
这个配置文件描述了一个名为 "godemo" 的应用程序的部署规范,包括了副本数量、容器镜像、端口暴露以及资源限制等信息。
2,创建godemo-deployment
用于将名为godemo-deployment.yaml的YAML文件中定义的Deployment资源应用到Kubernetes集群中
这是一个kubectl命令,用于将名为godemo-deployment.yaml的YAML文件中定义的Deployment资源应用到Kubernetes集群中。
这将会创建或更新Kubernetes中的Deployment资源,以确保其与godemo-deployment.yaml文件中定义的规范一致。
kubectl apply -f godemo-deployment.yaml
3,用于获取当前Kubernetes集群中所有的Pod
。执行该命令后,将会列出所有命名空间中的Pod的相关信息,包括名称、所属命名空间、状态、IP地址等。
kubectl get pods
4,用于获取当前Kubernetes集群中所有的服务
。执行该命令后,将会列出所有命名空间中的服务的相关信息,包括名称、类型、ClusterIP、外部IP等。
kubectl get services
5,创建godemo-service.yaml
java
apiVersion: v1 #指定了使用的 Kubernetes API 版本
kind: Service #定义了这个配置文件描述的 Kubernetes 资源类型为 Service。
metadata: #包含了资源的元数据,比如名称等。
name: godemo-service #指定了这个 Service 的名称为 "godemo-service"。
spec: #定义了 Service 的规格,包括服务类型、选择器和端口信息。
type: NodePort #指定了服务类型为 NodePort,这意味着服务将会暴露一个随机端口供外部访问。
selector: #定义了用于选择后端 Pod 的标签
app: godemo #指定了要匹配的标签,这里选择了标签为 "app: godemo" 的 Pod。
ports: #指定了服务需要暴露的端口。
- protocol: TCP #指定了端口使用的协议为 TCP
port: 7089 #指定了服务暴露的端口号为 7089
targetPort: 7080 #指定了服务转发流量到后端 Pod 的端口号为 7080。
这个配置文件描述了一个名为 "godemo-service" 的服务,使用 NodePort 类型,将流量转发到标签为 "app: godemo" 的 Pod,并将外部端口 7089 映射到后端 Pod 的端口 7080。
6,创建godemo-service.yaml的YAML文件中定义的Kubernetes服务应用到集群中
java
kubectl apply -f godemo-service.yaml
7,获取当前Kubernetes集群中所有节点的详细信息
INTERNAL-IP就是需要请求的服务的ip
包括节点的名称、状态、内部IP地址、外部IP地址等。执行该命令后,将会列出所有节点的详细信息。
//获取到应用的内网ip 192.168.49.2就是当前服务的ip
java
kubectl get nodes -o wide
示例
[root@iZ2zefj8x9bih0twyv5rcvZ giftpanel]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
minikube Ready control-plane 41h v1.28.3 192.168.49.2 <none> Ubuntu 22.04.3 LTS 4.19.91-27.3.al7.x86_64 docker://24.0.7
8,列出所有服务的相关信息
包括名称、类型、ClusterIP、外部IP等。
//获取到service的暴露端口
java
kubectl get services
示例
[root@iZ2zefj8x9bih0twyv5rcvZ giftpanel]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
godemo-service NodePort 10.101.28.30 <none> 7089:31634/TCP 16h
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 41h
8,测试应用 31634就是暴露的端口
curl http://192.168.49.2:31634/giftpanel/test/login?name=999999999999999999999999
返回内容
java
<!DOCTYPE html>
<html>
<head>
<title>Gin HTML Demo xxxxxxxxxx</title>
</head>
<body>
<h1>Welcome to Gin HTML Demo xxxxxxxxxx</h1>
<p>999999999999999999999999</p>
</body>
9,从Kubernetes集群中删除名为godemo-deployment的Deployment
java
kubectl delete deployment godemo-deployment
10,执行该命令后,将会从集群中删除名为godemo-service的服务
kubectl delete service godemo-service
11,排查问题常用命令,
java
kubectl get svc godemo-service
kubectl describe svc godemo-service
kubectl get pods --selector=app=godemo
kubectl logs <pod_name>
kubectl get svc godemo-service:用于获取名为 "godemo-service" 的Kubernetes服务的信息,包括名称、类型、集群IP等。
kubectl describe svc godemo-service:用于获取名为 "godemo-service" 的Kubernetes服务的详细描述信息,包括与该服务相关的端口、选择器和其他配置。
kubectl get pods --selector=app=godemo:用于获取具有标签 app=godemo 的所有Pod的信息,包括名称、状态和IP地址等。
kubectl logs <pod_name>:用于获取特定Pod的日志信息。您需要将 <pod_name> 替换为实际的Pod名称,以便查看该Pod的日志。