Kubernetes(简称k8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。在k8s中,Pod是最小的管理单元,一个Pod可以包含一个或多个容器。通过Kubernetes,用户可以在集群中部署各种服务,实现高可用性和弹性伸缩。
在Kubernetes集群中,所有内容都可以被抽象为资源,例如Pod、Deployment、Service等。通过操作这些资源,我们可以管理Kubernetes集群。kubectl
是Kubernetes的命令行工具,用于与Kubernetes集群进行交互,管理各种资源。
使用kubectl
来管理资源
kubectl
用法
kubectl
的基本命令格式如下:
kubectl [command] [TYPE] [NAME] [flags]
-
command:对资源的具体操作,例如
create
(创建)、get
(获取)、delete
(删除)。 -
TYPE:指定资源类型,大小写敏感。例如
pod
、deployment
、service
等。 -
NAME:指定资源的名称,大小写敏感。如果省略名称,则显示所有资源。
-
flags:指定可选的参数。例如,使用
-s
或--server
可以指定Kubernetes API server的地址和端口。
示例
以下是一些常用的kubectl
命令示例:
-
获取全部节点
kubectl get node
-
获取全部Pod
kubectl get pod
-
查看某个Pod的详细信息
kubectl get pod pod_name
-
获取全部命名空间
kubectl get ns
-
查看多个资源
kubectl get pod,svc,deploy
-
删除Pod
kubectl delete pod pod_name
如果Pod是由Deployment控制器创建的,直接删除Pod会导致Deployment自动创建一个新的Pod。如果需要彻底删除Pod,可以直接删除Deployment控制器。
资源管理方式
1. 命令式对象管理
命令式对象管理是直接通过命令操作资源。例如:
kubectl run 资源名称 --image=镜像名称 --port=端口号
示例:
kubectl run xdclass-nginx-pod --image=nginx:1.23.0 --port=80
kubectl create deployment xdclass-nginx --image=nginx:1.23.0
2. 命令式对象配置
命令式对象配置是通过命令和配置文件操作资源。例如:
kubectl create -f 配置文件名称.yaml
3. 声明式对象配置
声明式对象配置是通过apply
命令和配置文件操作资源。例如:
kubectl apply -f 配置文件名称.yaml
YAML文件示例
以下是一个Deployment的YAML文件示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.23.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
以下是一个Pod的YAML文件示例:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx:1.23.0
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
kubectl create
与kubectl apply
的区别
-
kubectl create
:-
首次执行时会创建资源。
-
如果资源名称在同一命名空间内已经存在,再次执行会报错。
-
-
kubectl apply
:-
首次执行时会创建资源。
-
再次执行时会根据配置文件进行升级、扩容等操作,即使配置文件没有变化也不会报错。
-