目录
Kubectl是管理k8s集群的命令行工具,通过生成的json格式传递给apiserver进行创建、查看、管理的操作。
一、基本命令
kubectl --help
命令 | 描述 |
---|---|
create | 创建资源 |
expose | 把资源提供出去被外部直接访问 |
run | 在集群中运行一个指定的镜像 |
set | 为 objects 设置一个指定的特征 |
explain | 查看资源的文档 |
get | 显示一个或更多资源 |
edit | 在服务器上编辑一个资源 |
delete | 删除 |
rollout | 回滚(更新了一个资源,出现了问题或不兼容,所以需要还原回原本的状态,执行回滚) |
scale | 设置一个新的副本数量 |
autoscale | 自动调整副本数量 |
certificate | 修改 certificate 资源(证书授权时使用) |
cluster-info | 显示集群信息 |
top | 显示资源的基本信息 |
cordon | 标记 node 为污点 |
uncordon | 标记 node 为 取消污点 |
drain | 删除node节点 |
taint | 更新一个或者多个 node 上的污点 |
describe | 显示一个指定资源的详情 |
logs | 输出容器在 pod 中的日志 |
attach | 附加到一个运行中的容器 |
exec | 在一个 容器中执行一个命令 |
port-forward | 为pod转发一个或多个 |
proxy | 运行一个代理到kubernetes API server |
cp | 复制文件或目录到容器里或者从容器中复制文件和目录 |
auth | 检查授权 |
1、创建——kubectl run命令
格式:kubectl run NAME --image=image [–env=“key=value”] [–port=port] [–replicas=replicas]
[–dry-run=bool] [–overrides=inline-json] [–command] – [COMMAND] [args…] [options]
NAME:资源名称
--image=:指向镜像
--env=:指定参数,变量
--port=:指定端口
--replicas:指定副本集数量
--dry-run=:试运行
--overrides=:是否在线
--command:参数指令
例如:
多副本有效的创建
创建资源名称nginx-deployment,镜像nginx,端口80,副本集3个
[root@localhost bin]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3
2、get查看
[root@localhost bin]# kubectl get pods #查看pods资源
NAME READY STATUS RESTARTS AGE
nginx-dbddb74b8-8qrm4 1/1 Running 2 25h
[root@localhost bin]# kubectl get pods -w #可以自动去监控创建的状态
[root@localhost bin]# kubectl get all 查看全部资源信息,包括service的资源信息(提供对外资源),deployment控制器的资源,replicaset副本集资源
NAME READY STATUS RESTARTS AGE
pod/nginx-dbddb74b8-8qrm4 1/1 Running 2 25h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 2d3h
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx 1 1 1 1 25h
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-dbddb74b8 1 1 1 25h
3、删除
[root@localhost bin]# kubectl delete deploy/nginx #删除单个的pod
deployment.extensions "nginx" deleted
[root@localhost bin]# kubectl delete deploy/nginx-deployment #删除多个pods资源
[root@localhost bin]# kubectl get pods
No resources found.
二、项目周期的演示(nginx)
1、创建nginx
# 创建nginx资源,名字nginx,镜像nginx最新镜像,端口80,3个副本集
[root@localhost bin]# 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
# 查看pods资源,deployment控制器资源,replicaset副本集资源
[root@localhost bin]# kubectl get pods,deployment
NAME READY STATUS RESTARTS AGE
pod/nginx-7697996758-4clcs 1/1 Running 0 77s
pod/nginx-7697996758-724cq 1/1 Running 0 77s
pod/nginx-7697996758-v8wxt 1/1 Running 0 77s
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.extensions/nginx 3 3 3 3 78s
2、发布nginx service提供负载均衡的功能
格式: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]
expose:发布
-f:指定文件
--port:对外提供的端口
-target-port:目标端口
-name:资源名称
1)发布
[root@localhost bin]# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
service/nginx-service exposed
2)查看资源对象简写
[root@localhost bin]# kubectl api-resources
3)查看关联后端的节点
[root@localhost bin]# kubectl get endpoints
NAME ENDPOINTS AGE
kubernetes 192.168.241.20:6443,192.168.241.5:6443 2d3h
nginx-service 172.17.28.2:80,172.17.28.4:80,172.17.88.4:80 56s
4)网络状态详细信息
[root@localhost bin]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
nginx-7697996758-4clcs 1/1 Running 0 6m23s 172.17.28.2 192.168.241.3 <none>
nginx-7697996758-724cq 1/1 Running 0 6m23s 172.17.28.4 192.168.241.3 <none>
nginx-7697996758-v8wxt 1/1 Running 0 6m23s 172.17.88.4 192.168.241.4 <none>
5)服务暴露的端口
[root@localhost bin]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 2d3h
nginx-service NodePort 10.0.0.36 <none> 80:30326/TCP 2m43s
3、验证负载均衡
在node01操作,查看负载均衡端口38804
kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,在kubernetes 1.8之后引入了ipvs模式
[root@localhost ~]# yum install ipvsadm -y
[root@localhost ~]# ipvsadm -L -n
在node02操作 同样安装ipvsadmin工具查看
[root@localhost ~]# ipvsadm -L -n
4、在master01操作 查看访问日志
注意:如果访问其他node无法访问检查proxy组件
[root@localhost bin]# kubectl get pods
[root@localhost bin]# kubectl logs nginx-7697996758-4clcs
5、更新nginx 为1.14版本
谷歌浏览器重新加载刷新页面查看nginx版本信息
1)查看当前版本号
进入网页——开发者工具——Network——找到访问的记录——Header——找到Server看到当前版本
2)变更版本
获取帮助信息
[root@localhost bin]# kubectl set --help
3)获取修改模板
[root@localhost bin]# kubectl set image deployment/nginx nginx=nginx:1.14
deployment.extensions/nginx image updated
因为更新了版本后,之前的容器全需要滚动发布,此时这里需要再次获取更新版本后的容器
[root@localhost ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
nginx-6ff7c89c7c-75858 1/1 Running 0 2m21s 172.17.88.5 192.168.241.4 <none>
nginx-6ff7c89c7c-ksfsc 1/1 Running 0 95s 172.17.88.4 192.168.241.4 <none>
nginx-6ff7c89c7c-mh4xl 1/1 Running 0 117s 172.17.28.4 192.168.241.3 <none>
4)处于动态监听状态
[root@localhost bin]# kubectl get pods -w
[root@localhost bin]# kubectl get pods
6、回滚nginx
获取帮助信息
[root@localhost bin]# kubectl rollout --help
1)执行回滚
[root@localhost ~]# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/nginx-6ff7c89c7c-75858 1/1 Running 0 7m59s
pod/nginx-6ff7c89c7c-ksfsc 1/1 Running 0 7m13s
pod/nginx-6ff7c89c7c-mh4xl 1/1 Running 0 7m35s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 2d4h
service/nginx-service NodePort 10.0.0.36 <none> 80:30326/TCP 27m
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx 3 3 3 3 31m
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-6ff7c89c7c 3 3 3 7m59s
replicaset.apps/nginx-7697996758 0 0 0 31m
[root@localhost bin]# kubectl rollout undo deployment.apps/nginx #会回滚到上一个状态
deployment.apps/nginx
2)检查回滚状态
[root@localhost ~]# kubectl rollout status deployment.apps/nginx
deployment "nginx" successfully rolled out
3)删除nginx
[root@localhost bin]# kubectl delete deployment.apps/nginx
[root@localhost bin]# kubectl get deploy
No resources found.
[root@localhost bin]# kubectl get pods
No resources found.
4)删除服务SVC
[root@localhost bin]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 2d4h
nginx-service NodePort 10.0.0.36 <none> 80:30326/TCP 35m
[root@localhost bin]# kubectl delete svc/nginx-service
service "nginx-service" deleted
[root@localhost bin]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 2d4h
5)查看具体资源的详细信息
[root@localhost bin]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3
6)查看deployment资源
[root@localhost bin]# kubectl describe deployment.apps/nginx
7)进入pod
[root@localhost ~]# kubectl exec -it nginx-7697996758-shml7 bash