在k8s集群部署一个Java站点

kubectl命令行管理工具

Kubectl 是一个命令行接口,用于对 Kubernetes 集群运行命令。kubectl 在 $HOME/.kube 目录中寻找一个名为 config 的文件。您可以通过设置环境变量 KUBECONFIG 或设置 --kubeconfig 参数指定其它 kubeconfig 文件。

本文概述了 kubectl 语法和命令操作描述,并提供了常见的示例。有关每个命令的详细信息,包括所有受支持的参数和子命令,请参阅 kubectl 参考文档。有关安装说明,请参见 安装 kubectl 。

语法

使用以下语法 kubectl 从终端窗口运行命令:

kubectl [command] [TYPE] [NAME] [flags]

其中 commandTYPENAME 和 flags 分别是:

  • command:指定要对一个或多个资源执行的操作,例如 creategetdescribedelete
  • 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<#>
  • flags: 指定可选的参数。例如,可以使用 -s 或 -server 参数指定 Kubernetes API 服务器的地址和端口。

注意:

从命令行指定的参数会覆盖默认值和任何相应的环境变量。

如果您需要帮助,只需从终端窗口运行 kubectl help 即可。

操作

下表包含所有 kubectl 操作的简短描述和普通语法:

操作语法描述
annotatekubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]添加或更新一个或多个资源的注解。
api-versionskubectl api-versions [flags]列出可用的 API 版本。
applykubectl apply -f FILENAME [flags]从文件或 stdin 对资源应用配置更改。
attachkubectl attach POD -c CONTAINER [-i] [-t] [flags]附加到正在运行的容器,查看输出流或与容器(stdin)交互。
autoscalekubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]自动伸缩由副本控制器管理的一组 pod。
cluster-infokubectl cluster-info [flags]显示有关集群中主服务器和服务的端口信息。
configkubectl config SUBCOMMAND [flags]修改 kubeconfig 文件。有关详细信息,请参阅各个子命令。
createkubectl create -f FILENAME [flags]从文件或 stdin 创建一个或多个资源。
deletekubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]从文件、标准输入或指定标签选择器、名称、资源选择器或资源中删除资源。
describekubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]显示一个或多个资源的详细状态。
diffkubectl diff -f FILENAME [flags]将 live 配置和文件或标准输入做对比 (BETA)
editkubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]使用默认编辑器编辑和更新服务器上一个或多个资源的定义。
execkubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]对 pod 中的容器执行命令。
explainkubectl explain [--recursive=false] [flags]获取多种资源的文档。例如 pod, node, service 等。
exposekubectl 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 服务暴露。
getkubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]列出一个或多个资源。
labelkubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]添加或更新一个或多个资源的标签。
logskubectl logs POD [-c CONTAINER] [--follow] [flags]在 pod 中打印容器的日志。
patchkubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]使用策略合并 patch 程序更新资源的一个或多个字段。
port-forwardkubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]将一个或多个本地端口转发到一个 pod。
proxykubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]运行 Kubernetes API 服务器的代理。
replacekubectl replace -f FILENAME从文件或标准输入中替换资源。
rolling-updatekubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags]通过逐步替换指定的副本控制器及其 pod 来执行滚动更新。
runkubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server | client | none] [--overrides=inline-json] [flags]在集群上运行指定的镜像。
scalekubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]更新指定副本控制器的大小。
stopkubectl stop不推荐:相反,请参阅 kubectl delete。
versionkubectl 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 国际」知识共享许可协议进行许可。

(4)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
兰玉磊的头像兰玉磊
上一篇 2020年9月23日
下一篇 2020年9月29日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注