前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >备战CKA每日一题——第4天

备战CKA每日一题——第4天

作者头像
我的小碗汤
发布2019-11-25 22:17:12
7600
发布2019-11-25 22:17:12
举报
文章被收录于专栏:我的小碗汤我的小碗汤

看到大家这几天的答题情况,还是很不错的,但是还需要认真审题,按要求答题,还有就是记得练习查询官网文档,并把标签分类保存下来。

昨日考题

通过单个命令创建一个deployment并暴露Service。deployment和Service名称为cka-1120,使用nginx镜像, deployment拥有2个pod

昨日答案

代码语言:javascript
复制
[root@liabio ~]# kubectl run  cka-1120--replicas 2 --expose=true --port=80 --image=nginxkubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.service/cka-1120 createddeployment.apps/cka-1120 created
[root@liabio ~]# kubectl get all | grep cka-1120pod/cka-1120-554b9c4798-7jcrb1/1Running0118mpod/cka-1120-554b9c4798-fpjwj   1/1Running0118mservice/cka-1120ClusterIP10.108.140.25<none>80/TCP           118mdeployment.apps/cka-11202/222118m

昨日解析

官网中提供了详细的kubectl使用方法,位于REFERENCE--kubectl CLI--kubectl Commands标签下。即:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#run

kubectl run会创建deployment或者job来管理Pod,命令语法如下:

代码语言:javascript
复制
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]

NAME指定deployment和service的名称;

--replicas缩写-r,指定实例数,默认为1;

--expose如果为true,会创建有ClusterIP的service,默认为false;

--port表示容器暴露的端口,如果expose为true,该端口也是service的端口;

--image指定容器用的镜像;

--dry-run为true时,只打印将要发送的对象,而不真正发送它,默认为false。

创建名为cka-1120-01,带环境变量的deployment

代码语言:javascript
复制
kubectl run cka-1120-01 --image=nginx --env="DNS_DOMAIN=cluster.local" --env="POD_NAMESPACE=default"

创建名为cka-1120-02,带label的deployment

代码语言:javascript
复制
kubectl run cka-1120-02 --image=nginx --labels="app=nginx,env=prod"

还有一个--restart参数,默认为Always,如果设置为OnFailure,则job会被创建;如果设置为Never,则普通Pod会被创建。

代码语言:javascript
复制
[root@liabio ~]# kubectl run cka-1120-03 --image=nginx --restart=OnFailurekubectl run --generator=job/v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.job.batch/cka-1120-03 created[root@liabio ~]#[root@liabio ~]# kubectl run cka-1120-04 --image=nginx --restart=Neverpod/cka-1120-04 created

参数--schedule指定cronjob的定时规则,如果指定该参数,则会创建出cronjob

代码语言:javascript
复制
[root@liabio ~]# kubectl run pi --schedule="0/5 * * * ?" --image=perl --restart=OnFailure -- perl -Mbignum=bpi -wle 'print bpi(2000)'cronjob.batch/pi created

目前不支持直接创建Statefulset、Daemonset等资源对象。

kubectl run执行后,到底发生了什么?有必要看看kubectl源码,入口函数在$GOPATH\src\k8s.io\kubernetes\cmd\clicheck\checkcliconventions.go中

其中cmd.NewKubectlCommand为构建kubectl以及其子命令行参数。最终的执行业务逻辑的代码都在pkg\kubectl包下面。不同的子命令:apply、run、create入口对应的在pkg\kubectl\cmd下面:

最重要的o.Run(f, cmd, args)中会对kubectl run传入的参数进行一系列校验,填充默认值。

在360行调用o.createGeneratedObject根据不同的generator生成deployment、cronjob、job、pod等资源对象,并向apiserver发送创建请求。

如果设置了expose为true,在372行,同样的调用o.createGeneratedObject生成并创建service。

o.createGeneratedObject方法第649行,根据不同的generator实现生成不同的资源对象。

run命令对应的generator实现有以下几种,代码位于pkg\kubectl\generate\versioned\generator.go中的DefaultGenerators函数。

代码语言:javascript
复制
case"run":        generator = map[string]generate.Generator{RunV1GeneratorName:                 BasicReplicationController{},RunPodV1GeneratorName:              BasicPod{},DeploymentV1Beta1GeneratorName:     DeploymentV1Beta1{},DeploymentAppsV1Beta1GeneratorName: DeploymentAppsV1Beta1{},DeploymentAppsV1GeneratorName:      DeploymentAppsV1{},JobV1GeneratorName:                 JobV1{},CronJobV2Alpha1GeneratorName:       CronJobV2Alpha1{},CronJobV1Beta1GeneratorName:        CronJobV1Beta1{},}

o.createGeneratedObject方法第689行对生成的资源对象向APIServer发送http创建请求。

具体的kubectl run命令的代码,感兴趣的同学可以进一步深挖,我也会在后续的源码分析系列文章中进行更详细的解析。

今日考题

通过命令行,使用nginx镜像创建一个pod并手动调度到节点名为node1121节点上,Pod的名称为cka-1121,答题最好附上,所用命令、创建Pod所需最精简的yaml;如果评论有限制,请把注意点列出,主要需列出手动调度怎么做?注意:手动调度是指不需要经过kube-scheduler去调度。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 进击云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 昨日考题
  • 昨日答案
  • 昨日解析
  • 今日考题
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档