kubectl命令行管理工具
Kubectl 是一个命令行接口,用于对 Kubernetes 集群运行命令。kubectl
在 $HOME/.kube 目录中寻找一个名为 config 的文件。您可以通过设置环境变量 KUBECONFIG 或设置 --kubeconfig
参数指定其它 kubeconfig 文件。
本文概述了 kubectl
语法和命令操作描述,并提供了常见的示例。有关每个命令的详细信息,包括所有受支持的参数和子命令,请参阅 kubectl 参考文档。有关安装说明,请参见 安装 kubectl 。
语法
使用以下语法 kubectl
从终端窗口运行命令:
kubectl [command] [TYPE] [NAME] [flags]
其中 command
、TYPE
、NAME
和 flags
分别是:
command
:指定要对一个或多个资源执行的操作,例如create
、get
、describe
、delete
。TYPE
:指定资源类型。资源类型不区分大小写,可以指定单数、复数或缩写形式。例如,以下命令输出相同的结果:```shell kubectl get pod pod1 kubectl get pods pod1 kubectl get po pod1 ```
NAME
:指定资源的名称。名称区分大小写。如果省略名称,则显示所有资源的详细信息kubectl get pods
。在对多个资源执行操作时,您可以按类型和名称指定每个资源,或指定一个或多个文件:
- 要按类型和名称指定资源:
- 要对所有类型相同的资源进行分组,请执行以下操作:
TYPE1 name1 name2 name<#>
。
例子:kubectl get pod example-pod1 example-pod2
- 分别指定多个资源类型:
TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>
。
例子:kubectl get pod/example-pod1 replicationcontroller/example-rc1
- 要对所有类型相同的资源进行分组,请执行以下操作:
- 用一个或多个文件指定资源:
-f file1 -f file2 -f file<#>
- 使用 YAML 而不是 JSON 因为 YAML 更容易使用,特别是用于配置文件时。
例子:kubectl get pod -f ./pod.yaml
- 使用 YAML 而不是 JSON 因为 YAML 更容易使用,特别是用于配置文件时。
flags
: 指定可选的参数。例如,可以使用-s
或-server
参数指定 Kubernetes API 服务器的地址和端口。
注意:
从命令行指定的参数会覆盖默认值和任何相应的环境变量。
如果您需要帮助,只需从终端窗口运行 kubectl help
即可。
操作
下表包含所有 kubectl 操作的简短描述和普通语法:
操作 | 语法 | 描述 |
---|---|---|
annotate | kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | 添加或更新一个或多个资源的注解。 |
api-versions | kubectl api-versions [flags] | 列出可用的 API 版本。 |
apply | kubectl apply -f FILENAME [flags] | 从文件或 stdin 对资源应用配置更改。 |
attach | kubectl attach POD -c CONTAINER [-i] [-t] [flags] | 附加到正在运行的容器,查看输出流或与容器(stdin)交互。 |
autoscale | kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] | 自动伸缩由副本控制器管理的一组 pod。 |
cluster-info | kubectl cluster-info [flags] | 显示有关集群中主服务器和服务的端口信息。 |
config | kubectl config SUBCOMMAND [flags] | 修改 kubeconfig 文件。有关详细信息,请参阅各个子命令。 |
create | kubectl create -f FILENAME [flags] | 从文件或 stdin 创建一个或多个资源。 |
delete | kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] | 从文件、标准输入或指定标签选择器、名称、资源选择器或资源中删除资源。 |
describe | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] | 显示一个或多个资源的详细状态。 |
diff | kubectl diff -f FILENAME [flags] | 将 live 配置和文件或标准输入做对比 (BETA) |
edit | kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] | 使用默认编辑器编辑和更新服务器上一个或多个资源的定义。 |
exec | kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]] | 对 pod 中的容器执行命令。 |
explain | kubectl explain [--recursive=false] [flags] | 获取多种资源的文档。例如 pod, node, service 等。 |
expose | kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags] | 将副本控制器、服务或 pod 作为新的 Kubernetes 服务暴露。 |
get | kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags] | 列出一个或多个资源。 |
label | kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | 添加或更新一个或多个资源的标签。 |
logs | kubectl logs POD [-c CONTAINER] [--follow] [flags] | 在 pod 中打印容器的日志。 |
patch | kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] | 使用策略合并 patch 程序更新资源的一个或多个字段。 |
port-forward | kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] | 将一个或多个本地端口转发到一个 pod。 |
proxy | kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags] | 运行 Kubernetes API 服务器的代理。 |
replace | kubectl replace -f FILENAME | 从文件或标准输入中替换资源。 |
rolling-update | kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags] | 通过逐步替换指定的副本控制器及其 pod 来执行滚动更新。 |
run | kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server | client | none] [--overrides=inline-json] [flags] | 在集群上运行指定的镜像。 |
scale | kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] | 更新指定副本控制器的大小。 |
stop | kubectl stop | 不推荐:相反,请参阅 kubectl delete。 |
version | kubectl version [--client] [flags] | 显示运行在客户端和服务器上的 Kubernetes 版本。 |
记住:有关命令操作的更多信息,请参阅 kubectl 参考文档。
k8s命令自动补全
k8s的命令自动补全,使用的是`bash-completion`实现的。
下面介绍一下配置步骤:
# 1. 安装
yum install bash-completion -y
# 2. 生效
source <(kubectl completion bash)
# 3. 重新进入bash环境或者直接输入新的bash环境
bash
查看 常用命令集合
# 查看pod列表
kubectl get pods
# 查看pod列表详情
kubectl get pods -o wide
# 查看pod事件
kubectl describe pod java-web-6f9559f5b9-vmb8f
# 查看service列表
kubectl get svc
# 查看service列表详情
kubectl get svc -o wide
# 查看node
kubectl get node
# 查看node列表详情
kubectl get node -o wide
# 查看endpoint
kubectl get ep
拉取代码并制作镜像
准备java环境
yum -y install java-1.8.0-openjdk maven
编译构建
mvn clean package -D maven.skip.test=true
创建项目的Dockerfile
FROM tomcat:8
LABEL fdevops www.fdevops.com
# RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
构建项目镜像
docker build -t java-demo:v1 .
给构建的镜像打tag
docker tag java-demo:v1 lanyulei/java-demo:v1
推送到docker hub
# 执行这一步之前需要使用 docker login 进行docker hub的登录
docker push lanyulei/java-demo:v1
使用Deployment部署项目
指定镜像创建deployment
kubectl create deployment java-web --image=lanyulei/java-demo:v1
使用NodePort暴露端口
kubectl expose deployment java-web --port=80 --target-port=8080 --type=NodePort
本文部分内容来源与k8s官方文档。
本文为原创文章,未经授权禁止转载本站文章。
原文出处:兰玉磊的个人博客
原文链接:https://www.fdevops.com/2020/09/28/zaik8sjiqunbushuyigejavazhandian
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。