k8s---Kubectl 命令管理
文章目录什么是kubectl:kubectl基本命令:创建:kubectl run命令删除:kubectl detele命令项目周期:一.创建资源二.发布资源三.更新资源版本信息四.回滚资源版本信息五.删除资源信息六.查看具体资源的详细信息什么是kubectl:●kubectl是管理k8s集群的命令行工具,通过生成的json格式传递给apiserver进行创建,查看,管理的操作●帮助操作:[roo
文章目录
什么是kubectl:
●kubectl是管理k8s集群的命令行工具,通过生成的json格式传递给apiserver进行创建,查看,管理的操作
●帮助操作:
[root@master02 ~]# 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节点设置为污点状态,那pod资源就不会创建在污点的这台node节点上)
Troubleshooting and Debugging Commands:
describe 显示一个指定 resource 或者 group 的 resources 详情 ##记录了pod的创建详细过程
logs ##输出容器在 pod 中的日志(作用于排障)
attach ##用于远程连接到某一个指定的容器
exec ##用于进入到某一个容器
port-forward ##负责端口转发
proxy ##运行一个 proxy 到 Kubernetes API server(代理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 ##查看哪些资源名称可以缩写
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).
kubectl基本命令:
创建 :kubectl run命令
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas]
[--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]
举例:
创建nginx无状态化的资源,镜像为nginx;对外暴露端口为nginx;建立3个副本
[root@master02 ~]# 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
[root@master02 ~]# kubectl get pods -w ##监控容器创建过程
NAME READY STATUS RESTARTS AGE
nginx-dbddb74b8-bpksv 1/1 Running 0 23h
nginx-deployment-5477945587-2bt64 0/1 ContainerCreating 0 30s
nginx-deployment-5477945587-5pgjf 0/1 ContainerCreating 0 30s
nginx-deployment-5477945587-l8j8c 1/1 Running 0 30s
nginx-deployment-5477945587-2bt64 1/1 Running 0 33s
nginx-deployment-5477945587-5pgjf 1/1 Running 0 44s
[root@master02 ~]# kubectl get pods ##查看创建的3个nginx资源
NAME READY STATUS RESTARTS AGE
nginx-dbddb74b8-bpksv 1/1 Running 0 24h
nginx-deployment-5477945587-2bt64 1/1 Running 0 2m17s
nginx-deployment-5477945587-5pgjf 1/1 Running 0 2m17s
nginx-deployment-5477945587-l8j8c 1/1 Running 0 2m17s
[root@master02 ~]# kubectl get pods,svc,rs ##同时查看三个资源信息
[root@master02 ~]# kubectl get pods,svc,rs -o wide ##加上-o wide可以查看到更加详细的资源
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
pod/nginx-dbddb74b8-bpksv 1/1 Running 0 24h 172.17.57.2 192.168.148.139 <none>
pod/nginx-deployment-5477945587-2bt64 1/1 Running 0 24m 172.17.64.3 192.168.148.140 <none>
pod/nginx-deployment-5477945587-5pgjf 1/1 Running 0 24m 172.17.57.4 192.168.148.139 <none>
pod/nginx-deployment-5477945587-l8j8c 1/1 Running 0 24m 172.17.57.3 192.168.148.139 <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 25h <none>
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.extensions/nginx-dbddb74b8 1 1 1 24h nginx nginx pod-template-hash=dbddb74b8,run=nginx
replicaset.extensions/nginx-deployment-5477945587 3 3 3 24m nginx-deployment nginx pod-template-hash=5477945587,run=nginx-deployment
[root@master02 ~]# kubectl get pods,svc,deploy,rs ##deploy:控制器资源信息
创建了3个nginx的pod资源;发现一个pod会对应一个控制器和一个副本集的资源
- Deployment:控制器,决定了pod资源的版本更新
- Replicaset:决定了版本的数量
当pod2宕机了,但是副本集的数量是3个,就会先重新创建pod2资源,再将原先的pod2删除,保证运行的数量是副本集的数量3个,保证服务正常运行
[root@master02 ~]# kubectl get all ##也是同时查看4个资源
删除:kubectl detele命令
●删除方式:
- 1.如果是文件形式创建的用:kubectl detele -f yaml文件
- 2.基于镜像创建删除:kubectl detele pods 资源名
[root@master02 ~]# kubectl delete deploy/nginx-deployment ##将创建的3个nginx资源都删除
但是发现service没被删除,因为是独立的资源要单独删除
项目周期:
●项目的生命周期:
- 创建–》发布–》更新–》回滚–》删除
一.创建资源
[root@master02 ~]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3 ##创建nginx的资源,端口为80端口,提供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
[root@master ~]# kubectl get all -o wide ##查看所有的资源信息,并且显示pod对应的IP地址信息
二.发布资源
1.发布nginx service提供负载均衡的功能
语法:参考kubectl expose --help ##用help命令帮助查看用法信息
kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP]
[--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]
[options]
●首先必须了解pod有4个端口
- Nodeport:提供给外部流量访问k8s集群中的service入口
- Port:service暴露在clusterIP
- targetPort:容器映射的外部端口
- 容器port:容器内部端口
[root@master ~]# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
service/nginx-service exposed
--name:资源名称
--type=Nodeport:端口类型是nodeport去进行访问
--port=80:pod资源的端口号为80
--target-port=80:容器映射的外部端口80
41099:就是nodeport端口,提供给外部访问的端口
2.这时打开浏览器访问,因为资源创建在node01和02上,只需要输入http://192.168.148.140:41099/或者http://192.168.148.139:41099/都可以访问nginx的web页面
3.查看关联后端的节点
[root@master ~]# kubectl get endpoints ##查看服务对应的节点端口
NAME ENDPOINTS AGE
kubernetes 192.168.148.137:6443,192.168.148.138:6443 2d
nginx-service 172.17.57.2:80,172.17.57.3:80,172.17.64.3:80 9m12s
4.在node01操作,查看负载均衡端口
●kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,在kubernetes 1.8之后引入了ipvs模式
[root@node01 ~]# yum -y install ipvsadm ##node节点上安装ipvs工具
[root@node01 ~]# ipvsadm -L -n ##-L:显示整个列表;-n:以数字形式显示
访问不管哪个node节点都会去做负载均衡
5.在master01操作 查看访问日志(注意:如果访问其他node无法访问检查proxy组件)
[root@master ~]# kubectl get pods ##先查看pod资源信息
NAME READY STATUS RESTARTS AGE
nginx-7697996758-89q9m 1/1 Running 0 17h
nginx-7697996758-lnnjg 1/1 Running 0 17h
nginx-7697996758-z4q9z 1/1 Running 0 17h
[root@master ~]# kubectl logs nginx-7697996758-89q9m ##查看访问日志
三.更新资源版本信息
1.谷歌浏览器重新加载刷新页面查看nginx版本信息,点击设置选择开发者工具
2.获取修改模板
[root@master ~]# kubectl set image --help
Examples:
# Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox container image to 'busybox'.
kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1 ##语法模板
3.更新nginx 为1.14版本
[root@master ~]# kubectl set image deployment/nginx nginx=nginx:1.14
deployment.extensions/nginx image updated
[root@master ~]# kubectl get pods -w ##监听更新状态
发现采用的是滚动式更新方式
[root@master ~]# kubectl get pods ##查看新的Pod资源信息
NAME READY STATUS RESTARTS AGE
nginx-6ff7c89c7c-4rsmt 1/1 Running 0 2m30s
nginx-6ff7c89c7c-bbgwc 1/1 Running 0 2m13s
nginx-6ff7c89c7c-f4wnx 1/1 Running 0 98s
对比旧的资源信息发生了改变
[root@master ~]# kubectl get pods ##先查看pod资源信息
NAME READY STATUS RESTARTS AGE
nginx-7697996758-89q9m 1/1 Running 0 17h
nginx-7697996758-lnnjg 1/1 Running 0 17h
nginx-7697996758-z4q9z 1/1 Running 0 17h
4.重新打开浏览器查看版本信息是否发生改变
四.回滚资源版本信息
[root@master ~]# kubectl rollout --help ##查看帮助信息
Manage the rollout of a resource.
Valid resource types include:
* deployments
* daemonsets
* statefulsets
Examples:
# Rollback to the previous deployment
kubectl rollout undo deployment/abc
# Check the rollout status of a daemonset
kubectl rollout status daemonset/foo
Available Commands:
history 显示 rollout 历史
pause 标记提供的 resource 为中止状态
resume 继续一个停止的 resource
status 显示 rollout 的状态
undo 撤销上一次的 rollout
Usage:
kubectl rollout SUBCOMMAND [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).
1.查看历史版本
[root@master ~]# kubectl rollout history deployment/nginx ##查看资源的更新记录
deployment.extensions/nginx
REVISION CHANGE-CAUSE
1 <none> ##有两个状态
2 <none>
2.执行回滚
[root@master ~]# kubectl rollout undo deployment/nginx
deployment.extensions/nginx
[root@master ~]# kubectl get pods -w ##监听回滚状态
3.这时打开浏览器刷新页面,查看版本号
五.删除资源信息
1.删除nginx资源
[root@master ~]# kubectl get deploy ##查看deployment(有三个控制器资源)
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 3 3 3 3 21h
[root@master ~]# kubectl delete deployment/nginx ##删除控制器等于删除了nginx资源
deployment.extensions "nginx" deleted
[root@master ~]# kubectl get deploy
No resources found.
[root@master ~]# kubectl get pods ##pod被删除了
No resources found.
2.删除服务SVC
[root@master ~]# kubectl get svc ##查看服务
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 2d5h
nginx-service NodePort 10.0.0.35 <none> 80:41099/TCP 4h42m
[root@master ~]# kubectl delete svc/nginx-service ##删除nginx资源的服务
service "nginx-service" deleted
[root@master ~]# kubectl get svc #
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 2d5h ##只剩下k8s的服务在运行
六.查看具体资源的详细信息
[root@master ~]# kubectl get pods ##查看pod资源信息
NAME READY STATUS RESTARTS AGE
nginx-7697996758-b2bk4 1/1 Running 0 17m
nginx-7697996758-r9fml 1/1 Running 0 17m
nginx-7697996758-rq744 1/1 Running 0 17m
[root@master ~]# kubectl describe pod nginx-7697996758-b2bk4 ##describe pod 名称
1.查看单个资源的详细信息
Name: nginx-7697996758-b2bk4 ##名字
Namespace: default ##命名空间
Priority: 0
PriorityClassName: <none>
Node: 192.168.148.139/192.168.148.139 IP地址
Start Time: Sat, 10 Oct 2020 11:36:29 +0800
Labels: pod-template-hash=7697996758
run=nginx
Annotations: <none>
Status: Running
IP: 172.17.57.2 ##pod IP
Controlled By: ReplicaSet/nginx-7697996758
Containers:
nginx:
Container ID: docker://f12f6ae1202103b81f96113d2d0b71669322ba89b8c5d042e60ebc37702a279c
Image: nginx:latest ##镜像信息
Image ID: docker-pullable://nginx@sha256:fc66cdef5ca33809823182c9c5d72ea86fd2cef7713cf3363e1a0b12a5d77500
Port: 80/TCP ##端口
Host Port: 0/TCP
State: Running pod状态
Started: Sat, 10 Oct 2020 11:36:45 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-szxtd (ro)
Conditions:
Type Status ##容器状态
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes: ##挂载的数据卷信息
default-token-szxtd:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-szxtd
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events: ##创建的核心
Type Reason Age From Message
---- ------ ---- ---- -------
##创建过程:1.先经过scheduler调度创建
Normal Scheduled 18m default-scheduler Successfully assigned
default/nginx-7697996758-b2bk4 to 192.168.148.139 ##调度给139节点
2.下载镜像
Normal Pulling 18m kubelet, 192.168.148.139 pulling image "nginx:latest"
3.镜像下载成功
Normal Pulled 18m kubelet, 192.168.148.139 Successfully pulled image "nginx:latest"
4.创建容器
Normal Created 18m kubelet, 192.168.148.139 Created container
5.开启容器
Normal Started 18m kubelet, 192.168.148.139 Started container
2.查看deployment资源
[root@master ~]# kubectl describe deployment/nginx
Name: nginx
Namespace: default
CreationTimestamp: Fri, 09 Oct 2020 17:33:15 +0800
Labels: run=nginx
Annotations: deployment.kubernetes.io/revision: 3
Selector: run=nginx
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: run=nginx
Containers:
nginx:
Image: nginx:latest
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Progressing True NewReplicaSetAvailable
Available True MinimumReplicasAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-7697996758 (3/3 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 3h47m deployment-controller Scaled up replica set nginx-6ff7c89c7c to 1
Normal ScalingReplicaSet 3h47m deployment-controller Scaled down replica set nginx-7697996758 to 2
Normal ScalingReplicaSet 3h47m deployment-controller Scaled up replica set nginx-6ff7c89c7c to 2
Normal ScalingReplicaSet 3h46m deployment-controller Scaled down replica set nginx-7697996758 to 1
Normal ScalingReplicaSet 3h46m deployment-controller Scaled up replica set nginx-6ff7c89c7c to 3
Normal ScalingReplicaSet 3h46m deployment-controller Scaled down replica set nginx-7697996758 to 0
Normal DeploymentRollback 3h31m deployment-controller Rolled back deployment "nginx" to revision 1
Normal ScalingReplicaSet 3h31m deployment-controller Scaled up replica set nginx-7697996758 to 1
Normal ScalingReplicaSet 3h30m deployment-controller Scaled up replica set nginx-7697996758 to 2
Normal ScalingReplicaSet 3h30m deployment-controller Scaled down replica set nginx-6ff7c89c7c to 2
Normal ScalingReplicaSet 3h30m (x2 over 21h) deployment-controller Scaled up replica set nginx-7697996758 to 3
Normal ScalingReplicaSet 3h30m deployment-controller Scaled down replica set nginx-6ff7c89c7c to 1
Normal ScalingReplicaSet 3h30m deployment-controller Scaled down replica set nginx-6ff7c89c7c to 0
3.进入pod
[root@master ~]# kubectl exec -it nginx-7697996758-b2bk4 bash ##进入nginx资源
root@nginx-7697996758-b2bk4:/# ls
bin docker-entrypoint.d home media proc sbin tmp
boot docker-entrypoint.sh lib mnt root srv usr
dev etc lib64 opt run sys var
root@nginx-7697996758-b2bk4:/# exit ##直接退出
exit
更多推荐
所有评论(0)