| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
bullet045
8年前发布

Kubernetes基本要素介绍(下)

   <p>【编者的话】Rimas Mocevicius是云计算、 CoreOS 、 Kubernetes 、DEIS和应用程序容器解决方案架构师 。CoreOS Essentials一书作者。目前就职于DEIS。本文是其发表在DEIS上的官方博客,介绍Kubernetes的系列教程的第二篇。</p>    <p>在我的<a href="http://www.open-open.com/lib/view/open1462775378802.html">上一篇</a>博客中,我介绍了kubectl,控制面板,命名空间,Pod,服务,复制管理器和标签的概念。</p>    <p>这篇博客中,我们继续介绍卷,Secret,滚动升级和Helm。</p>    <h2>卷</h2>    <p>一个卷就是包含一些数据的目录,它可以被容器作为文件系统的组成部分而使用。卷通常作为存储有状态的应用数据而使用。</p>    <p>Kubernetes支持以下卷类型</p>    <ul>     <li>emptyDir</li>     <li>hostPath</li>     <li>gcePersistentDisk</li>     <li>awsElasticBlockStore</li>     <li>nfs</li>     <li>iscsi</li>     <li>glusterfs</li>     <li>rbd</li>     <li>gitRepo</li>     <li>secret</li>     <li>persistentVolumeClaim</li>    </ul>    <p>具体细节请参阅 <a href="/misc/goto?guid=4959672743258981940" rel="nofollow,noindex">文档</a> 。</p>    <p>在本篇博客中,我们将只涉及其中的一种卷类型:hostPath。</p>    <p>hostPath卷从主机节点的文件系统中挂载一个文件或目录到Pod中。举例来说,上一篇博客中我们介绍的nginx复制控制器可以使用此种类型卷去存储HTML文件。</p>    <p>让我们使用卷配置去更新 nginxrc.yaml :</p>    <pre>  apiVersion: v1    kind: ReplicationController    metadata:    name: my-nginx    spec:    replicas: 1    template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx        image: nginx        ports:        - containerPort: 80      # Mount volume into pod        volumeMounts:          # must match the name of the volume name below          - name: shared-html            # mount path within the container            mountPath: /usr/share/nginx/html    # volumes to be mounted to containers      volumes:      - name: shared-html        hostPath:          path: /somepath/shared/html  </pre>    <p>使用这种复制控制器配置, nginx 容器将从主机挂载的卷来提供HTML文件的访问。</p>    <p>如果你改变副本数量这可能是无效的,因为 /some/shared/html 目录可能不存在于其他节点中。如果你想进行扩展,你需要在Kubernetes节点之间复制这些文件,让他们在所有节点中都是可访问的。或者你可以使用NFS或者GlusterFS的卷类型。</p>    <h2>Secret</h2>    <p>Secret可能是任何一段敏感的数据,录入授权令牌,加密钥匙,SSL证书,SSH钥匙等。Secret可以被容器访问。将此种信息放在Secret中比放在Pod定义或者Docker镜像中要更安全并更灵活。</p>    <p>想要使用Secret,Pod或者复制控制器需要引用Secret。</p>    <p>下面是一份Secret主文件的例子:</p>    <pre>  apiVersion: v1    kind: Secret    metadata:    name: mysecrets    data:    password: dmFsdWUtMg0K    username: someuser  </pre>    <p>创建文件的命令:</p>    <pre>  $ kubectl create -f mysecrecs.yaml  </pre>    <p>我们可以将它作为一个卷挂载到容器中:</p>    <pre>  ...        volumeMounts:          # must match the name of the volume name below          - name: my-passwords         readOnly: true            # mount path within the container            mountPath: /etc/my-passwords-volume    # volumes to be mounted to containers      volumes:      - name: my-passwords        secrect:          secrectName: mysecrects  </pre>    <p>我们的应用现在可以从 /etc/my-passwords-volume 目录中读取 username 和 password 文件。其中包含了你在Secret主文件中定义的值。非常简单。</p>    <p>如果你的应用需要环境变量,一个方法是将环境变量写入这些文件中,然后在应用启动之前读取它们并设置为环境变量。</p>    <p>想知道更多关于Secret的内容,请参阅 <a href="/misc/goto?guid=4959672743350892604" rel="nofollow,noindex">文档</a> 。</p>    <h2>滚动升级</h2>    <p>在上一篇博客中,我们了解了如果通过复制管理器来发布Pod。这篇文章中,我们将知道如果做 <em>滚动升级</em> 。举例来说,这可以实现更新Docker镜像的版本。</p>    <p>以下是你要做的:</p>    <pre>  $ kubectl rolling-update my-nginx --image=nginx:1.9.10    Created my-nginx-2088ed66ed908b2434289b30bf3dafe3    Scaling up my-nginx-2088ed66ed908b2434289b30bf3dafe3 from 0 to 3, scalling down    Scaling my-nginx-2088ed66ed908b2434289b30bf3dafe3 up to 1    Scaling my-nginx down to 2    Scaling my-nginx-2088ed66ed908b2434289b30bf3dafe3 up to 2    Scaling my-nginx down to 1    Scaling my-nginx-2088ed66ed908b2434289b30bf3dafe3 up to 3    Scaling my-nginx down to 0    Update succeeded. Deleting old controller: my-nginx    Renaming my-nginx-2088ed66ed908b2434289b30bf3dafe3 to my-nginx    replicationcontroller "my-nginx" rolling updated  </pre>    <p>我们刚刚通过升级Docker镜像来升级 my-nginx 复制控制器管理的Pod。换句话说,这个过程先删除了老容器,并使用最新的镜像来创建一个新容器。</p>    <p>这只适用于每个复制管理器管理一种Docker镜像的情况。如果你的复制管理器管理多种Dokcer镜像,一个新的复制管理器将被创建。</p>    <p>下面是例子:</p>    <pre>  $ kubectl rolling-update my-nginx -f nginxrc-v2.yaml  </pre>    <p>以上的命令通过使用在 nginxrc-v2.yaml 主文件中定义的新复制控制器去升级 my-nginx 的Pod。当新的复制控制器生效后,老的将会被删除。</p>    <p>你能在文档中读到更多关于 <a href="/misc/goto?guid=4959672743440168040" rel="nofollow,noindex">简单滚动升级</a> 或者 <a href="/misc/goto?guid=4959672743526529144" rel="nofollow,noindex">复制管理器滚动升级</a> 的内容。</p>    <h2>Helm</h2>    <p><a href="/misc/goto?guid=4958973029074384445" rel="nofollow,noindex">Helm</a> 是Kubernetes的包管理器。</p>    <p><img src="https://simg.open-open.com/show/776c301b393aac9ec8b5b08bfb0c3f52.png"></p>    <p>我们已经学习了在Kubernetes集群上安装复制管理器和服务。你可以自己编写控制器配置文件,或者也可以用已经预写好的配置文件,这些文件应该是由你进行测试。Helm就是为了后一种场景服务的。</p>    <p>Helm允许你安装 <em>chart</em> 。一个chart对于一个Kubernetes的主文件。这些chart可以被Helm社区共享。</p>    <p>让我们安装Helm:</p>    <pre>  $ mkdir ~/bin    $ cd ~/bin    $ curl -s https://get.helm.sh | bash  </pre>    <p>你可以查看可用的命令:</p>    <pre>  helm -h  </pre>    <p>使用Helm的第一步是从Github上获取最新的chart:</p>    <pre>  $ helm update    ---> Creating /home/user/.helm/config.yaml    ---> Checking repository charts    ---> Cloning into '/home/user/.helm/cache/charts'...Already up-to-date.    ---> Done  </pre>    <p>让我们搜索某一个chart:</p>    <pre>  $ helm search weavescope    weavescope - Weave Scope chart  </pre>    <p>Weave Scope提供了一个你的Docker容器的可视化地图。可以在 <a href="/misc/goto?guid=4959672743634988471" rel="nofollow,noindex">官方产品页</a> 中获取更多信息。</p>    <p>我们可以更详细的了解chart中的信息:</p>    <pre>  $ helm info weavescope    Name: weavescope    Home: http://weave.works/product/scope/    Version: 0.1.1    Description: Weave Scope chart    Details: This chart allows to run Weave Scope on Kubernetes  </pre>    <p>并且我们可以拉取这些chart到我们的工作区中:</p>    <pre>  $ helm fetch weavescope    ---> Fetched chart into workspace /home/user/.helm/workspace/charts/weavescope    ---> Done  </pre>    <p>Helm总是保存chart的一份拷贝到 ~/.helm/workspace/charts/目录中 。</p>    <p>所以让我们安装这个Weave Scope chart:</p>    <pre>  $ helm install weavescope    ---> Running `kubectl create -f` ...    service "weave-scope-app" created    replicationcontroller "weave-scope-app" created    daemonset "weave-scope-probe" created  </pre>    <h2>---> Done</h2>    <p># Weave Scope</p>    <p>Using Weave Scope with Kubernetes:</p>    <p>https://github.com/weaveworks/scope#using-weave-scope-with-kubernetes</p>    <p>If you have a scope.weave.works account and want to run Scope in Cloud</p>    <p>Service Mode, comment out the line</p>    <p>"$(WEAVE_SCOPE_APP_SERVICE_HOST):$(WEAVE_SCOPE_APP_SERVICE_PORT)"] in</p>    <p>scope-probe-ds.yaml manifest and uncomment the line below, replacing</p>    <p>"foo" with the Service token which you will obtain when logging in to</p>    <p>your scope.weave.works account: "--probe.token=foo"]</p>    <p>DaemonSets need to be enabled in Kubernetes cluster and all node hosts</p>    <p>are run with the Docker socket at /var/run/docker.sock</p>    <p>========================================</p>    <p>让我们检查复制控制器的工作情况:</p>    <pre>  $ kubectl get rc weave-scope-app    NAME              DESIRED   CURRENT   AGE    weave-scope-app   1         1         8m  </pre>    <p>完美。现在我们应该检查守护进程集的工作情况了:</p>    <pre>  $ kubectl get ds weave-scope-probe    NAME                DESIRED   CURRENT   NODE-SELECTOR   AGE    weave-scope-probe   3         3         <none>          10m  </pre>    <p>Weave Scope监听4040端口,但是该个端口并没有暴露给我们。所以让我们建立本地端口到远程端口的跳转,这样我们就可以从自己的笔记本电脑上远程访问它了。</p>    <p>获取Pod列表:</p>    <pre>  $ kubectl get pods    NAME                          READY     STATUS    RESTARTS   AGE    weave-scope-app-k8m4k         1/1       Running   0          23m    weave-scope-probe-b5jh7       1/1       Running   0          23m    weave-scope-probe-psit2       1/1       Running   0          23m  </pre>    <p>我们感兴趣的是 weave-scope-app Pod。</p>    <p>我们能像这样增加一个端口跳转:</p>    <pre>  $ kubectl port-forward weave-scope-app-k8m4k 4040:4040    I0428 18:43:37.014631   14389 portforward.go:213] Forwarding from 127.0.0.1:4040 -> 4040    I0428 18:43:37.015420   14389 portforward.go:213] Forwarding from [::1]:4040 -> 4040  </pre>    <p>现在我们开以用浏览器打开 http://127.0.0.1:4040 。</p>    <p>你可以看到WeaveScope的界面:</p>    <p><img src="https://simg.open-open.com/show/d227e348ed6c08c9086d14f7d4b0933e.png"></p>    <p>太棒了。所有的东西都能正常工作了!</p>    <p>如果你过后想要卸载Weave Scope,你可以这样做:</p>    <pre>  $ helm uninstall weavescope -n default  </pre>    <h2>总结</h2>    <p>在Kubernetes微教程的第二部分我们介绍了卷,secret,滚动更新和Helm。Helm是Kubernetes的包管理器,并使安装和管理Kubernetes主文件更加容易。</p>    <p>===========================================译者介绍,当当网架构师,开源数据库分库分表中间件作者。目前从事Docker相关调研工作。</p>    <p> </p>    <p>来自: http://dockone.io/article/1281</p>    
 本文由用户 bullet045 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1462775518774.html
Kubernetes