zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    mysql数据库常用指令
    解决windows的mysql无法启动 服务没有报告任何错误的经验。
    “Can't open file for writing”或“operation not permitted”的解决办法
    启动Apache出现错误Port 80 in use by "Unable to open process" with PID 4!
    如何打开windows的服务services.msc
    常见的HTTP状态码 404 500 301 200
    linux系统常用的重启、关机指令
    (wifi)wifi移植之命令行调试driver和supplicant
    linux(debian)安装USB无线网卡(tp-link TL-WN725N rtl8188eu )
    alloc_chrdev_region申请一个动态主设备号,并申请一系列次设备号
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/7779511.html
Copyright © 2011-2022 走看看