一、创建和管理Pod
创建nginx pod
kubectl run nginx-local --image=nginx
查看Pod
kubectl get pod
描述
kubectl describe pod nginx-local
查看Pod的运行日志
kubectl logs mynginx
显示pod的IP和运行节点信息
kubectl get pod -owide
使用Pod的ip+pod里面运行容器的端口
curl 10.42.1.3
在容器中执行
kubectl exec nginx-local -it -- /bin/bash
删除
kubectl delete pod nginx-local
强制删除
kubectl delete pod nginx-local --force
二、Deployment(部署)与ReplicaSet(副本集)
Deployment是对ReplicaSet和Pod更高级的抽象。它使Pod拥有多副本,自愈,扩缩容、滚动升级等能力。ReplicaSet(副本集)是一个Pod的集合。它可以设置运行Pod的数量,确保任何时间都有指定数量的 Pod 副本在运行。
常见命令
创建deployment,部署3个运行nginx的Pod
kubectl create deployment nginx-deployment --image=nginx:1.22 --replicas=3
查看deployment
kubectl get deploy
查看replicaSet
kubectl get rs
删除deployment
kubectl delete deploy nginx-deployment
缩放
手动缩放
将副本数量调整为5
kubectl scale deployment/nginx-deployment --replicas=5
kubectl get deploy
自动缩放
自动缩放通过增加和减少副本的数量,以保持所有 Pod 的平均 CPU 利用率不超过 75%。
自动缩放
kubectl autoscale deployment/nginx-auto --min=3 --max=10 --cpu-percent=75
查看自动缩放
kubectl get hpa
删除自动缩放
kubectl delete hpa nginx-deployment
滚动更新
查看版本和Pod
kubectl get deployment/nginx-deployment -owide
kubectl get pods
更新容器镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.23
滚动更新
kubectl rollout status deployment/nginx-deployment
查看过程
kubectl get rs --watch
版本回滚
查看历史版本
kubectl rollout history deployment/nginx-deployment
查看指定版本的信息
kubectl rollout history deployment/nginx-deployment --revision=2
回滚到历史版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2
三、Service(服务)
Service将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。
Service为一组 Pod 提供相同的 DNS 名,并且在它们之间进行负载均衡。
Kubernetes 为 Pod 提供分配了IP 地址,但IP地址可能会发生变化。
集群内的容器可以通过service名称访问服务,而不需要担心Pod的IP发生变化。
ServiceType 取值
- ClusterIP:将服务公开在集群内部。kubernetes会给服务分配一个集群内部的 IP,集群内的所有主机都可以通过这个Cluster-IP访问服务。集群内部的Pod可以通过service名称访问服务。
- NodePort:通过每个节点的主机IP 和静态端口(NodePort)暴露服务。 集群的外部主机可以使用节点IP和NodePort访问服务。
- ExternalName:将集群外部的网络引入集群内部。
- LoadBalancer:使用云提供商的负载均衡器向外部暴露服务。
kubectl expose deployment/nginx-deployment --name=nginx-service --type=ClusterIP --port=8080 --target-port=80
nginx-service后面的负载
kubectl get endpoints nginx-service
随机产生主机端口
kubectl expose deployment/nginx-deployment --name=nginx-service2 --type=NodePort --port=8080 --target-port=80
四、Namespace(命名空间)
名空间(Namespace)是一种资源隔离机制,将同一集群中的资源划分为相互隔离的组。
Kubernetes 会创建四个初始命名空间:
default
默认的命名空间,不可删除,未指定命名空间的对象都会被分配到default中。kube-system
Kubernetes 系统对象(控制平面和Node组件)所使用的命名空间。kube-public
自动创建的公共命名空间,所有用户(包括未经过身份验证的用户)都可以读取它。通常我们约定,将整个集群中公用的可见和可读的资源放在这个空间中。kube-node-lease
租约(Lease)对象使用的命名空间。每个节点都有一个关联的 lease 对象,lease 是一种轻量级资源。lease对象通过发送心跳,检测集群中的每个节点是否发生故障。
管理命名空间
创建命名空间
kubectl create namespace dev
查看命名空间
kubectl get ns
在命名空间内运行Pod
kubectl run nginx --image=nginx --namespace=dev
kubectl run my-nginx --image=nginx -n=dev
查看命名空间内的Pod
kubectl get pods -n=dev
查看命名空间内所有对象
kubectl get all
删除命名空间会删除命名空间下的所有内容
kubectl delete ns dev
切换当前命名空间
查看当前上下文
kubectl config current-context
将dev设为当前命名空间,后续所有操作都在此命名空间下执行。
kubectl config set-context $(kubectl config current-context) --namespace=dev
常用命令缩写
名称 |
缩写 |
Kind |
namespaces |
ns |
Namespace |
nodes |
no |
Node |
pods |
po |
Pod |
services |
svc |
Service |
deployments |
deploy |
Deployment |
replicasets |
rs |
ReplicaSet |
statefulsets |
sts |
StatefulSet |