K8S---kubectl管理工具
程序员文章站
2022-07-10 10:39:28
...
K8S—kubectl管理工具
一.什么是kubectl?
Kubectl是管理k8s集群的命令行工具,通过生成的json格式传递给apiserver进行创建、查看、管理的操作。
二.具体命令
1.帮助信息
[aaa@qq.com dashboard]# kubectl --help
kubectl controls the Kubernetes cluster manager.
Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/
Basic Commands (Beginner):
create Create a resource from a file or from stdin.
expose 使用 replication controller, service, deployment 或者 pod
并暴露它作为一个 新的 Kubernetes Service
run 在集群中运行一个指定的镜像
set 为 objects 设置一个指定的特征
Basic Commands (Intermediate):
explain 查看资源的文档
get 显示一个或更多 resources
edit 在服务器上编辑一个资源
delete Delete resources by filenames, stdin, resources and names, or by resources and
label selector
Deploy Commands:
rollout Manage the rollout of a resource
scale 为 Deployment, ReplicaSet, Replication Controller 或者 Job
设置一个新的副本数量
autoscale 自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController
的副本数量
Cluster Management Commands:
certificate 修改 certificate 资源.
cluster-info 显示集群信息
top Display Resource (CPU/Memory/Storage) usage.
cordon 标记 node 为 unschedulable
uncordon 标记 node 为 schedulable
drain Drain node in preparation for maintenance
taint 更新一个或者多个 node 上的 taints
Troubleshooting and Debugging Commands:
describe 显示一个指定 resource 或者 group 的 resources 详情
logs 输出容器在 pod 中的日志
attach Attach 到一个运行中的 container
exec 在一个 container 中执行一个命令
port-forward Forward one or more local ports to a pod
proxy 运行一个 proxy 到 Kubernetes API server
cp 复制 files 和 directories 到 containers 和从容器中复制 files 和
directories.
auth Inspect authorization
Advanced Commands:
apply 通过文件名或标准输入流(stdin)对资源进行配置
patch 使用 strategic merge patch 更新一个资源的 field(s)
replace 通过 filename 或者 stdin替换一个资源
wait Experimental: Wait for a specific condition on one or many resources.
convert 在不同的 API versions 转换配置文件
Settings Commands:
label 更新在这个资源上的 labels
annotate 更新一个资源的注解
completion Output shell completion code for the specified shell (bash or zsh)
Other Commands:
alpha Commands for features in alpha
api-resources Print the supported API resources on the server
api-versions Print the supported API versions on the server, in the form of "group/version"
config 修改 kubeconfig 文件
plugin Provides utilities for interacting with plugins.
version 输出 client 和 server 的版本信息
Usage:
kubectl [flags] [options]
Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).
[aaa@qq.com dashboard]#
2.创建并查看(kubectl run命令)
//项目的生命周期,创建–》发布–》更新–》回滚–》删除
[aaa@qq.com k8s]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx-deployment created
[aaa@qq.com k8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-dbddb74b8-864v5 1/1 Running 0 4d16h
nginx-deployment-5477945587-6m95v 1/1 Running 0 19s
nginx-deployment-5477945587-rqx56 1/1 Running 0 19s
nginx-deployment-5477945587-v728w 1/1 Running 0 19s
//查看创建的副本所在节点(1个在88.14,2个在88.13)
[aaa@qq.com k8s]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
nginx-dbddb74b8-864v5 1/1 Running 0 4d16h 172.17.94.2 192.168.88.13 <none>
nginx-deployment-5477945587-6m95v 1/1 Running 0 119s 172.17.29.3 192.168.88.14 <none>
nginx-deployment-5477945587-rqx56 1/1 Running 0 119s 172.17.94.4 192.168.88.13 <none>
nginx-deployment-5477945587-v728w 1/1 Running 0 119s 172.17.94.3 192.168.88.13 <none>
//查看所有资源
[aaa@qq.com k8s]# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/nginx-dbddb74b8-864v5 1/1 Running 0 4d16h
pod/nginx-deployment-5477945587-6m95v 1/1 Running 0 4m1s
pod/nginx-deployment-5477945587-rqx56 1/1 Running 0 4m1s
pod/nginx-deployment-5477945587-v728w 1/1 Running 0 4m1s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 4d20h
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx 1 1 1 1 4d16h
deployment.apps/nginx-deployment 3 3 3 3 4m1s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-dbddb74b8 1 1 1 4d16h
replicaset.apps/nginx-deployment-5477945587 3 3 3 4m1s
//删除pod资源
[aaa@qq.com k8s]# kubectl delete deploy/nginx
deployment.extensions "nginx" deleted
[aaa@qq.com k8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-5477945587-6m95v 1/1 Running 0 6m8s
nginx-deployment-5477945587-rqx56 1/1 Running 0 6m8s
nginx-deployment-5477945587-v728w 1/1 Running 0 6m8s
[aaa@qq.com k8s]# kubectl delete deploy/nginx-deployment
deployment.extensions "nginx-deployment" deleted
[aaa@qq.com k8s]# kubectl get pods
No resources found.
三.项目周期
1.创建nginx并查看
[aaa@qq.com k8s]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx created
[aaa@qq.com k8s]# kubectl get pods,deployment,replicaset
NAME READY STATUS RESTARTS AGE
pod/nginx-7697996758-bt7dp 1/1 Running 0 36s
pod/nginx-7697996758-dj8k9 1/1 Running 0 36s
pod/nginx-7697996758-vvgtk 1/1 Running 0 36s
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.extensions/nginx 3 3 3 3 36s
NAME DESIRED CURRENT READY AGE
replicaset.extensions/nginx-7697996758 3 3 3 36s
2.发布nginx,service提供负载均衡的功能
//发布和查看:
[aaa@qq.com k8s]# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
service/nginx-service exposed
[aaa@qq.com k8s]# kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-7697996758-bt7dp 1/1 Running 0 3m28s
pod/nginx-7697996758-dj8k9 1/1 Running 0 3m28s
pod/nginx-7697996758-vvgtk 1/1 Running 0 3m28s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 4d20h
service/nginx-service NodePort 10.0.0.27 <none> 80:44846/TCP 9s
//查看资源对象简写
[aaa@qq.com k8s]# kubectl api-resources
//查看关联后端的节点
[aaa@qq.com k8s]# kubectl get endpoints
NAME ENDPOINTS AGE
kubernetes 192.168.88.11:6443,192.168.88.12:6443 4d20h
nginx-service 172.17.29.3:80,172.17.29.4:80,172.17.94.2:80 2m13s
//网络状态详细信息
[aaa@qq.com k8s]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
nginx-7697996758-bt7dp 1/1 Running 0 6m2s 172.17.29.3 192.168.88.14 <none>
nginx-7697996758-dj8k9 1/1 Running 0 6m2s 172.17.29.4 192.168.88.14 <none>
nginx-7697996758-vvgtk 1/1 Running 0 6m2s 172.17.94.2 192.168.88.13 <none>
//服务暴露的端口
[aaa@qq.com k8s]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 4d20h
nginx-service NodePort 10.0.0.27 <none> 80:44846/TCP 4m4s
3.在node01,node2操作,查看负载均衡端口44846
//kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,在kubernetes 1.8之后引入了ipvs模式
//安装ipvsadm
[aaa@qq.com ~]# yum install ipvsadm -y
[aaa@qq.com ~]# ipvsadm -L -n
TCP 192.168.88.13:44846 rr
-> 172.17.29.3:80 Masq 1 0 0
-> 172.17.29.4:80 Masq 1 0 0
-> 172.17.94.2:80 Masq 1 0 0
4.在master01操作 查看访问日志
(这时还没有访问端口,所有没有日志)
[aaa@qq.com k8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-7697996758-bt7dp 1/1 Running 0 14m
nginx-7697996758-dj8k9 1/1 Running 0 14m
nginx-7697996758-vvgtk 1/1 Running 0 14m
[aaa@qq.com k8s]# kubectl logs nginx-7697996758-bt7dp
[aaa@qq.com k8s]# kubectl logs nginx-7697996758-dj8k9
[aaa@qq.com k8s]# kubectl logs nginx-7697996758-vvgtk
//访问pod资源
//再去查看日志
[aaa@qq.com k8s]# kubectl logs nginx-7697996758-dj8k9
172.17.29.1 - - [10/May/2020:12:39:00 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" "-"
172.17.29.1 - - [10/May/2020:12:39:00 +0000] "GET /favicon.ico HTTP/1.1" 404 556 "http://192.168.88.14:44846/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" "-"
2020/05/10 12:39:00 [error] 6#6: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.29.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.88.14:44846", referrer: "http://192.168.88.14:44846/"
5.更新nginx
打开谷歌浏览器,点击右上角三个点—选择更多工具—点击开发者选项—>找到network—>刷新访问 —>找到headers头部信息,就可以看到nginx版本信息。
6.更新nginx版本为1.14
[aaa@qq.com k8s]# kubectl set image deployment/nginx nginx=nginx:1.14
deployment.extensions/nginx image updated
//处于动态监听状态
[aaa@qq.com k8s]# kubectl get pods -w
NAME READY STATUS RESTARTS AGE
nginx-6ff7c89c7c-2vbcr 0/1 ContainerCreating 0 6s
nginx-6ff7c89c7c-4swbz 1/1 Running 0 34s
nginx-6ff7c89c7c-nx725 1/1 Running 0 23s
nginx-7697996758-bt7dp 1/1 Running 0 31m
nginx-7697996758-dj8k9 0/1 Terminating 0 31m
....
(ctrl+C结束进程)
7.刷新查看版本变为1.14
8.回滚nginx
//查看历史版本(有2个版本)
[aaa@qq.com k8s]# kubectl rollout history deployment/nginx
deployment.extensions/nginx
REVISION CHANGE-CAUSE
1 <none>
2 <none>
//执行回滚
[aaa@qq.com k8s]# kubectl rollout undo deployment/nginx
deployment.extensions/nginx
//检查回滚状态
[aaa@qq.com k8s]# kubectl rollout status deployment/nginx
Waiting for deployment "nginx" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx" rollout to finish: 1 old replicas are pending termination...
deployment "nginx" successfully rolled out
//页面查看
9.删除nginx
//查看资源名称
[aaa@qq.com k8s]# kubectl get deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 3 3 3 3 37m
//删除
[aaa@qq.com k8s]# kubectl delete deployment/nginx
deployment.extensions "nginx" deleted
//查看
[aaa@qq.com k8s]# kubectl get deploy
No resources found.
[aaa@qq.com k8s]# kubectl get pods
No resources found.
//删除服务SVC
[aaa@qq.com k8s]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 4d21h
nginx-service NodePort 10.0.0.27 <none> 80:44846/TCP 36m
[aaa@qq.com k8s]# kubectl delete svc/nginx-service
service "nginx-service" deleted
[aaa@qq.com k8s]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 4d21h
10.查看具体资源的详细信息
[aaa@qq.com k8s]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx created
[aaa@qq.com k8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-7697996758-ksqr7 1/1 Running 0 21s
nginx-7697996758-s52gb 1/1 Running 0 21s
nginx-7697996758-v9qzw 1/1 Running 0 21s
11.查看deployment资源
[aaa@qq.com k8s]# kubectl describe deployment/nginx
12.进入pod(与docker容器相似)
[aaa@qq.com k8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-7697996758-ksqr7 1/1 Running 0 7m18s
nginx-7697996758-s52gb 1/1 Running 0 7m18s
nginx-7697996758-v9qzw 1/1 Running 0 7m18s
[aaa@qq.com k8s]# kubectl exec -it nginx-7697996758-ksqr7 bash
aaa@qq.com:/# exit
//exit退出
推荐阅读