求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   模型库  
会员   
 


AI 智能化软件测试方法与实践
5月23-24日 上海+在线



人工智能.机器学习TensorFlow
5月22-23日 北京



图数据库与知识图谱
5月22-23日 北京
 
 
 

Kubernetes教程
Kubernetes概述
Kubernetes设计架构
kubernetes设计理念
创建Kubernetes集群
基于Docker本地运行Kubernetes
使用Vagrant
本地运行Kubrenetes v1.0
Google Computer Engine入门
AWS EC2快速入门
在Azure上使用CoreOS和Weave的 Kubernetes
从零开始k8s
CoreOS部署Kubernetes集群
CloudStack部署Kubernetes集群
vSphere部署Kubernetes集群
Ferdora部署Kubernetes集群
CentOS部署Kubernetes集群
Ubuntu物理节点上部署Kubernets集群
Mesos部署Kubernetes集群
Kubernetes用户指南:应用程序管理
名词解释 Pods
名词解释 Labels
名词解释:Namespace
名词解释 Replication Controller
名词解释:Node
名词解释:ReplicaSets
名词解释 Services
名词解释 Volumes
名词解释:PV/PVC/StorageClass
名称解释:Deployment
名词解释:Secret
名词解释:StatefulSet
名词解释:DaemonSet
名词解释:Service Account
名词解释:CronJob
名词解释:Job
名词解释:Security Context和PSP
名词解释:Resource Quotas
名词解释:Network Policy
名词解释:Ingress
名词解释:ThirdPartyResources
名词解释:ConfigMap
名词解释:PodPreset
配置Kubernetes
管理应用:部署持续运行的应用
Horizontal Pod Autoscaling
管理应用:连接应用
管理应用: 在生产环境中使用Pods和容器
Kubernetes UI
Kube-API Server
授权插件
认证插件
API Server端口配置
Admission Controller
Service Accounts集群管理指南
使用Kubernetes在云上原生部署cassandra
Spark例子
Storm 示例
示例: 分布式任务队列 Celery, RabbitMQ和Flower
Kubernetes在Hazelcast平台上部署原生云应用
Meteor on Kuberenetes
配置文件使用入门
环境向导示例
在Kubernetes上运行你的第一个容器
kubectl
安装和设置kubectl
kubectl annotate
kubectl api-versions
kubectl apply
kubectl attach
kubectl cluster-info
kubectl config
kubectl config set-cluster
kubectl config set-context
kubectl config set-credentials
kubectl config set
kubectl config unset
kubectl config use-context
kubectl config view
kubectl create
kubectl delete
kubectl describe
kubectl edit
kubectl exec
kubectl logs
kubectl version
故障排查
应用程序相关的故障排查
 
 

配置Kubernetes
 
1499 次浏览
66次  

除了像 kubectl run 和 kubectl expose 这些必要的命令,它们在各种地方都有介绍,kubernetes也支持可声明式的配置。配置文件也需要必要的命令,这样就可以在代码审查中

检查版本控制和文件改动,而代码审查对复杂的具有鲁棒性的可靠生产系统是非常重要的。在声明式风格中,所有的配置都保存在YAML或者JSON配置文件中,使用Kubernetes的API资源模式(schema)作为配置的模式(schema)。 kubectl 命令可以创建、更新、删除以及获取API资源。 kubectl 命令用 ApiVersion (目前是“v1”), kind 资源, name 资源去创建合适的API路径来执行特殊的操作。

使用配置文件创建一个容器

Kubernetes是在Pod中来运行容器的。一个包含了一个简单的HellWorld容器的Pod可以被如下的YAML文件指定:

apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec: # specification of the pod’s contents
restartPolicy: Never
containers:
- name: hello
image: "ubuntu:14.04"
command: ["/bin/echo","hello”,”world"]

metadata.name的 值 hello-world ,将会成为创建成功后Pod的名称,这个名称必须在集群中唯一,而 container[0].name 只是容器在Pod中的昵称。 image 就是Docker image的名称且Kubernetes默认会从Docker Hub中拉取镜像。

restartPolicy : Never 指明了我们只是想运行容器一次然后就终止Pod。

Command 覆盖了docker容器的 Entrypoint 。命令的参数(相当于Docker的 Cmd )可以指定 args 参数,如下所示:

command: ["/bin/echo"]
args: ["hello","world"]

创建这个pod就可以使用 create 命令了

$ kubectl create -f ./hello-world.yaml
pods/hello-world

当成功创建时, kubectl 打印出资源类型和资源名称。

配置验证

如果你不确定指定的资源是否正确,你可以 kubectl 帮你验证。

$ kubectl create -f ./hello-world.yaml --validate

假设我们指定的是 entrypoint 而不是 command ,你会看到如下输出:

I0709 06:33:05.600829 1 4160 schema.go:126] unknown field: entrypoint
I0709 06:33:05.600988 14160 schema.go:129] this may be a false alarm,
see https://github.com/ GoogleCloudPlatform/ kubernetes/issues/6842
pods/hello-world

kubectl create –validate 会警告已经检测出问题,除非缺少必须的字段或者字段值不合法,最后kubectl还是会创建出资源。一定要小心,未知的API字段会被忽略。这个pod没有 command 字段而被创建,command字段是一个可选字段,因为image镜像可以指定 Entrypoint 。访问Pod API object来查看合法字段列表。

环境变量和增加变量

Kubernetes没有自动的在shell中的运行命令(不是所有镜像都有shell)。如果你想在shell中运行你的命令,例如增加环境便令(使用 env 字段),你可以按如下做法:

apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec: # specification of the pod’s contents
restartPolicy: Never
containers:
- name: hello
image: "ubuntu:14.04"
env:
- name: MESSAGE
value: "hello world"
command: ["/bin/sh","-c"]
args: ["/bin/echo \"${MESSAGE}\""]

然而,一个shell需要的不仅是增加环境变量。如果你使用 $(ENVVAR) 语法Kubernetes将会为你做这些事。

查看pod状态

使用get命令,你可以看到你已经创建的pod(事实上是集群中你的所有pod)。如果你在创建后用足够快的速度输入 get 命令,你会看到下面的内容:

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-world 0/1 Pending 0 0s

初始化的时候,新创建的pod还未被调度,也就是还没有节点被选中去运行它。pod创建后会进行调度但是它很快,所以你正常是不会看到pods处于未被调度的状态,除非有问题产生。

在pod被调度之后,如果节点中还没有镜像那么就会先通过docker拉取响应的镜像。一切就绪后,你会看到容器在运行:

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-world 1/1 Running 0 s

Ready 列指示正在运行在pod中的容器数量。

而开始运行后很快这个容器将会被终止。 kubectl 会显示容器已经不再运行以及推出状态:

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-world 0/1 ExitCode:0 0 15s

查看pod输出

你会想要查看你运行命令的输出。像 docker logs 一样, kubectl logs 也会显示输出:

$ kubectl logs hello-world
hello world

删除pods

当你看完的输出,你应该删除pod:

$ kubectl delete pod hello-world
pods/hello-world

就像 create 一样,删除成功时 kubectl 也会打印出资源类型和资源名称。

你也可以使用 资源/名称格式指定一个pod:

$ kubectl delete pods/hello-world
pods/hello-world

终止pods不会自动的删除,你可以观察他们的最终状态,所以请确定清理了你的已经结束的pods。

在另一方面,为了在节点中释放磁盘空间容器和他们的日志也会被自动删除。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



1499 次浏览
66次
 捐助