• kubernetes入门(05)kubernetes的核心概念(2)


    一、使用 kubectl run 创建 pod(容器)

    命令 kubectl run类似于 docker run,可以方便的创建一个容器(实际上创建的是一个由deployment来管理的Pod):

    等到容器变成Running后,就可以用 kubectl 命令来操作它了,比如

    • kubectl get - 类似于 docker ps ,查询资源列表
    • kubectl describe - 类似于 docker inspect ,获取资源的详细信息
    • kubectl logs - 类似于 docker logs ,获取容器的日志
    • kubectl exec - 类似于 docker exec ,在容器内执行一个命令

    二、使用 yaml 创建 pod(容器)

    前面是通过 kubectl run 来启动了第一个Pod,但是 kubectl run 并不支持所有的功能。
    在Kubernetes中,更经常使用yaml文件来定义资源,并通过 kubectl create -f file.yaml 来创建资源。
    比如,一个简单的nginx Pod可以定义为:

    前面提到, kubectl run 并不是直接创建一个Pod,而是先创建一个Deployment资源
    (replicas=1),再由Deployment来自动创建Pod,这等价于这样一个配置:

    三、使用volume

    Pod的生命周期通常比较短,只要出现了异常,就会创建一个新的Pod来代替它。

    容器内的数据会随着Pod消亡而自动消失。

    Volume就是为了持久化容器数据而生,比如可以为redis容器指定一个hostPath来存储redis数据:

    Kubernetes volume支持非常多的插件,可以根据实际需要来选择:

    • emptyDir
    • hostPath
    • gcePersistentDisk
    • awsElasticBlockStore
    • nfs
    • iscsi
    • flocker
    • glusterfs
    • rbd
    • cephfs
    • gitRepo
    • secret
    • persistentVolumeClaim
    • downwardAPI
    • azureFileVolume
    • vsphereVolume

    四、使用service

    前面虽然创建了Pod,但是在kubernetes中,Pod的IP地址会随着Pod的重启而变化,并不建议直接拿Pod的IP来交互。

    那如何来访问这些Pod提供的服务呢?

    使用Service。Service为一组Pod(通过labels来选择)提供一个统一的入口,并为它们提供负载均衡和自动服务发现。

    比如,可以为前面的 nginx-app 创建一个service:

    这样,在cluster内部就可以通过 http://10.0.0.66 和 http://node-ip:30772 来访问nginx-app。

    而在cluster外面,则只能通过 http://node-ip:30772 来访问。

    个人理解::真正处理处理请求的pod可能在入口node上,也可能被service再次分发到其他的node上。

    四、扩展应用

    通过修改Deployment中副本的数量(replicas),可以动态扩展或收缩应用,这些自动扩展的容器会自动加入到service中,而收缩回收的容器也会自动从service中删除。

    $ kubectl scale --replicas=3 deployment/nginx-app
    $ kubectl get deploy

    五、滚动升级

    滚动升级(Rolling Update)通过逐个容器替代升级的方式来实现无中断的服务升级:

     kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2

    在滚动升级的过程中,如果发现了失败或者配置错误,还可以随时回滚:
    kubectl rolling-update frontend-v1 frontend-v2 --rollback
    需要注意的是,rolling-update只针对ReplicationController,不能用在策略不是RollingUpdate的Deployment上(Deployment可以在spec中设置更新策略为RollingUpdate,默认就是RollingUpdate):

    而更新应用的话,就可以直接用 kubectl set 命令:
    kubectl set image deployment/nginx-app nginx-app=nginx:1.9.1
    滚动升级的过程可以用 rollout 命令查看:

    kubectl rollout status deployment/nginx-app

    Deployment也支持回滚:

     

    六、资源限制

    Kubernetes通过cgroups提供容器资源管理的功能,可以限制每个容器的CPU和内存使
    用,比如对于刚才创建的deployment,可以通过下面的命令限制nginx容器最多只用
    50%的CPU和128MB的内存:

    七、健康检查

    Kubernetes作为一个面向应用的集群管理工具,需要确保容器在部署后确实处在正常的运行状态。

    Kubernetes提供了两种探针(Probe,支持exec、tcp和http方式)来探测容器的状态:

    • LivenessProbe:探测应用是否处于健康状态,如果不健康则删除重建改容器
    • ReadinessProbe:探测应用是否启动完成并且处于正常服务状态,如果不正常则更

    新容器的状态
    对于已经部署的deployment,可以通过 kubectl edit deployment/nginx-app 来更新manifest,增加健康检查部分:

    八、集群联邦

    集群联邦(Federation)用于跨可用区的Kubernetes集群,需要配合云服务商(如GCE、AWS)一起实现。

    九、创建kubernetes集群

    1、minikube

     2、play-with-k8s

    Play with Kubernetes提供了一个免费的Kubernets体验环境,直接访问http://play-withk8s.
    com就可以使用kubeadm来创建Kubernetes集群。注意,每个创建的集群最长可以
    使用4小时。
    Play with Kubernetes有个非常方便的功能:自动在页面上显示所有NodePort类型服务
    的端口,点解该端口即可访问对应的服务。
    详细使用方法可以参考Play-With-Kubernetes。

    3、Katacoda playground

    Katacoda playground也提供了一个免费的2节点Kuberentes体验环境,网络基于
    WeaveNet,并且会自动部署整个集群。但要注意,刚打开Katacoda playground页面时
    集群有可能还没初始化完成,可以在master节点上运行 launch.sh 等待集群初始化完
    成。
    部署并访问kubernetes dashboard的方法:

     

    然后点击Terminal Host 1右边的,从弹出的菜单里选择View HTTP port 8080 on Host1,即可打开Kubernetes的API页面。在该网址后面增加 /ui 即可访问dashboard。

  • 相关阅读:
    ubuntu 访问 共享 windows文件夹
    ubuntu下android环境的搭建
    smb使用 ------转载自http://blog.csdn.net/tlaff/article/details/5463068
    oracle jar
    悬浮按钮
    移动开发赚钱
    截取scrollview的滑动事件,传递给子控件
    put ListView in a ScrollView(bug fixed)
    35岁前务必成功的12级跳
    mysql分页原理和高效率的mysql分页查询语句
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/7779511.html
Copyright © 2020-2023  润新知