foreword
Kubernetes is an open source container orchestration system that helps us deploy and manage cloud-native applications. This article will deeply explore the concepts of resource management, network management and storage management in Kubernetes, including how to view the resource usage in Kubernetes, how to create Service and PersistentVolume/PersistentVolumeClaim, etc.
Steps
1. Resource management in Kubernetes
In Kubernetes, each Pod is assigned a certain amount of CPU and memory resources. In order to better manage these resources, Kubernetes introduces the concept of resource management. You can view resource usage in Kubernetes with the following command:
kubectl top pods
kubectl top nodes
Among them, kubectl top pods
the command is used to view the CPU and memory usage of each Pod, and kubectl top nodes
the command is used to view the CPU and memory usage of each node.
A Pod's CPU and memory usage can be limited with the following commands:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-app
image: my-image
resources:
limits:
cpu: "1"
memory: "1Gi"
requests:
cpu: "0.5"
memory: "500Mi"
In the example above, we limit the Pod's CPU usage to 1 core and memory usage to 1GB, while setting the requested values for CPU and memory to 0.5 cores and 500MB, respectively.
2. Network Management in Kubernetes
In Kubernetes, each Pod has its own IP address and can be exposed to external access through Service. In order to better manage these network resources, Kubernetes introduces the concept of network management. You can use the following command to view the network resources in Kubernetes:
kubectl get pods -o wide
kubectl get services
Among them, kubectl get pods -o wide
the command is used to view the detailed information of the Pod, including the IP address of the Pod and the information of the node where the Pod is located, and the kubectl get services
command is used to view the Service information in Kubernetes.
A Service can be created with the following command:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- name: http
port: 80
targetPort: 8080
type: LoadBalancer
In the above example, we created a Service named my-service
Service, which exposes the application my-app
as a Kubernetes service, and the service listens on port 80 and forwards requests to the application's port 8080. At the same time, we set the type of Service to LoadBalancer to automatically create a load balancer on the cloud platform and route traffic to the Service.
3. Storage management in Kubernetes
In Kubernetes, storage resources can be managed using the concepts of PersistentVolume and PersistentVolumeClaim. You can use the following command to view the storage resources in Kubernetes:
kubectl get pv
kubectl get pvc
Among them, kubectl get pv
the command is used to view the information of PersistentVolume, and kubectl get pvc
the command is used to view the information of PersistentVolumeClaim.
A PersistentVolume and PersistentVolumeClaim can be created with the following commands:
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
selector:
matchLabels:
app: my-app
In the above example, we created a named my-pv
PersistentVolume, which uses the hostPath storage type, stores data in /data
a directory, and has a capacity of 1GB. At the same time, we created a my-pvc
PersistentVolumeClaim called PersistentVolumeClaim, which limits the storage capacity request to 500MB, and matches it to the application using a selector my-app
.
Summarize
This article deeply explores the concepts of resource management, network management and storage management in Kubernetes, including how to view resource usage in Kubernetes, how to create Service and PersistentVolume/PersistentVolumeClaim, etc. I hope this article can help you better understand and apply the advanced features in Kubernetes.