1.陈述式资源管理方法
- kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口
- kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径
- kubectl 的命令大全
- kubectl --help
- k8s中文文档:docs.kubernetes.org.cn/683.html
- 对资源的增、删、查操作比较方便,但对改的操作就不容易了
1.1 命令介绍
//查看版本信息
kubectl version
//查看资源对象简写
kubectl api-resources
//查看集群信息
kubectl cluster-info
//配置kubectl自动补全
source <(kubectl completion bash)
vim .bashrc
//node节点查看日志
journalctl -u kubelet -f
1.2 基本信息的查看
//查看我们k8s的命名空间
kubectl get ns
#查看资源
kubectl get svc
# - n 指定命名空间
#查看所有命名空间下的资源
kubectl get svc --all-namespaces
等于
kubectl get svc -A
#查看所有命令空间下的pod
kubectl get pods -A
#查看我们指定命名空间的关键信息
kubectl get all -n default
#创建一个pod容器
kubectl create deployment 111-nginx --image=nginx --replicas 3 --port 80
#不指定命名空间的话,直接就是default命名空间
kubectl get all
#查看pod中的ip信息与所属节点信息
kubectl get pods -o wide
#查看我们pods所属的标签
kubectl get pods --show-labels
# -l 用来筛选键名
kubectl get pods -l app -A --show-labels
#指定查询单个pod容器的信息
kubectl get pods 111-nginx-56797fb9b9-6npcc -o wide --show-labels
#创建命名空间
kubectl create ns ky31
kubectl get ns
#指定我们的命名空间来进行创建pods
kubectl create deployment 222-nginx -n ky31 --image=nginx --port=80 --replicas=3
kubectl get pods -n ky31
#查看我们指定pod控制器的详细信息
kubectl describe deployments.apps -n ky31 222-nginx
#查看我们指定的pod容器的详细信息
kubectl describe pod -n ky31 222-nginx-7b9bc78cb-h7v8p
#使用kubectl命令来进入我们的pod容器,kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录
kubectl exec -it -n ky31 222-nginx-7b9bc78cb-h7v8p bash
#查看我们指定pod容器的日志信息
kubectl logs -n ky31 222-nginx-7b9bc78cb-h7v8p
#删除我们的pod容器
kubectl delete deployments.apps -n ky31 222-nginx
//若pod无法删除,总是处于terminate状态,则要强行删除pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
#grace-period表示过渡存活期,默认30s,在删除pod之前允许pod慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod
#使用scale扩缩容
kubectl scale deployment 222-nginx --replicas=5 -n ky31
kubectl scale deployment 222-nginx --replicas=0 -n ky31
#删除副本控制器
kubectl delete deployments.apps 222-nginx -n ky31
2.项目的生命周期:创建-->发布-->更新-->回滚-->删除
1.创建kubectl create命令
kubectl create deployment lzq-nginx --image=nginx:1.18.0 --replicas=3 --port=80 -n ky31
kubectl get all -n ky31
2.发布kubectl expose命令,将资源暴露为新的 Service
kubectl expose deployment lzq-nginx --name lzq-nginx --port=8080 --target-port=80 -n ky31
kubectl get svc -n ky31
kubectl describe svc lzq-nginx -n ky31
curl 10.96.71.67:8080
3.我们也可以使用create来创建service
kubectl create svc clusterip myapp-nginx --tcp=9090:80
kubectl create svc clusterip lzq-nginx --tcp=9090:80
3.k8s的资源
Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的(Pod可能会重建),另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求。
Service 通过 Label Selector 实现的对一组的 Pod 的访问。
对于容器应用而言,Kubernetes 提供了基于 VIP(虚拟IP) 的网桥的方式访问 Service,再由 Service 重定向到相应的 Pod。
3.1 service 的 type 类型:
-
ClusterIP:提供一个集群内部的虚拟IP以供Pod访问(service默认类型)
-
NodePort:在每个Node上打开一个端口以供外部访问,Kubernetes将会在每个Node上打开一个端口并且每个Node的端口都是一样的,通过 NodeIp:NodePort 的方式Kubernetes集群外部的程序可以访问Service。
-
每个端口只能是一种服务,端口范围只能是 30000-32767。
-
LoadBalancer:通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。
-
在service提交后,Kubernetes就会调用CloudProvider在公有云上为你创建一个负载均衡服务,并且把被代理的Pod的IP地址配置给负载均衡服务做后端。
-
externalName:将service名称映射到一个DNS域名上,相当于DNS服务的CNAME记录,用于让Pod去访问集群外部的资源,它本身没有绑定任何的资源。
kubectl expose deployment lzq-nginx --name lzq-nginx --port=8080 --target-port=80 -n ky31 --type=NodePort
我们使用后面那个node节点端口号来访问
curl 192.168.223.100:31606
3.2 容器应用的升级
我们现在看我们的容器版本为1.18.0,我们现在想升级我们的容器版本为1.22
kubectl set image deployment lzq-nginx nginx=nginx:1.22.0 -n ky31
3.3 容器的回滚
#查看我们指定pod控制器的更改次数
kubectl rollout history deployment lzq-nginx -n ky31
kubectl rollout history deployment lzq-nginx -n ky31
kubectl rollout undo deployment lzq-nginx -n ky31
kubectl describe deployments.apps lzq-nginx -n ky31
kubectl rollout undo deployment lzq-nginx -n ky31 --to-revision=3