热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kubernetes基本要素介绍(下)

kubernetes
本文讲的是Kubernetes基本要素介绍(下) 【编者的话】Rimas Mocevicius是云计算、 CoreOS 、 Kubernetes 、DEIS和应用程序容器解决方案架构师 。CoreOS Essentials一书作者。目前就职于DEIS。本文是其发表在DEIS上的官方博客,介绍Kubernetes的系列教程的第二篇。

在我的 上一篇博客 中,我介绍了kubectl、控制面板、命名空间、Pod、服务、复制管理器和标签的概念。

这篇博客中,我们继续介绍卷、Secret、滚动升级和Helm。

一个卷就是包含一些数据的目录,它可以被容器作为文件系统的组成部分而使用。卷通常作为存储有状态的应用数据而使用。

Kubernetes支持以下卷类型:
  • emptyDir
  • hostPath
  • gcePersistentDisk
  • awsElasticBlockStore
  • nfs
  • iscsi
  • glusterfs
  • rbd
  • gitRepo
  • secret
  • persistentVolumeClaim

具体细节请参阅 文档

在本篇博客中,我们将只涉及其中的一种卷类型:hostPath。

hostPath卷从主机节点的文件系统中挂载一个文件或目录到Pod中。举例来说, 上一篇博客 中我们介绍的Nginx复制控制器可以使用此种类型卷去存储HTML文件。

让我们使用卷配置去更新 nginxrc.yaml
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 

使用这种复制控制器配置, nginx 容器将从主机挂载的卷来提供HTML文件的访问。

如果你改变副本数量这可能是无效的,因为 /some/shared/html 目录可能不存在于其他节点中。如果你想进行扩展,你需要在Kubernetes节点之间复制这些文件,让他们在所有节点中都是可访问的。或者你可以使用NFS或者GlusterFS的卷类型。

Secret

Secret可能是任何一段敏感的数据,录入授权令牌,加密钥匙,SSL证书,SSH钥匙等。Secret可以被容器访问。将此种信息放在Secret中比放在Pod定义或者Docker镜像中要更安全并更灵活。

想要使用Secret,Pod或者复制控制器需要引用Secret。

下面是一份Secret主文件的例子:
apiVersion: v1 kind: Secret metadata: name: mysecrets data: password: dmFsdWUtMg0K username: someuser 

创建文件的命令:
$ kubectl create -f mysecrecs.yaml 

我们可以将它作为一个卷挂载到容器中:
...     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 

我们的应用现在可以从 /etc/my-passwords-volume 目录中读取 username password 文件。其中包含了你在Secret主文件中定义的值。非常简单。

如果你的应用需要环境变量,一个方法是将环境变量写入这些文件中,然后在应用启动之前读取它们并设置为环境变量。

想知道更多关于Secret的内容,请参阅 文档

滚动升级

上一篇博客 中,我们了解了如果通过复制管理器来发布Pod。这篇文章中,我们将知道如果做 滚动升级 。举例来说,这可以实现更新Docker镜像的版本。

以下是你要做的:
$ 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 

我们刚刚通过升级Docker镜像来升级 my-nginx 复制控制器管理的Pod。换句话说,这个过程先删除了老容器,并使用最新的镜像来创建一个新容器。

这只适用于每个复制管理器管理一种Docker镜像的情况。如果你的复制管理器管理多种Dokcer镜像,一个新的复制管理器将被创建。

下面是例子:
$ kubectl rolling-update my-nginx -f nginxrc-v2.yaml 

以上的命令通过使用在 nginxrc-v2.yaml 主文件中定义的新复制控制器去升级 my-nginx 的Pod。当新的复制控制器生效后,老的将会被删除。

你能在文档中读到更多关于 简单滚动升级 或者 复制管理器滚动升级 的内容。

Helm

Helm 是Kubernetes的包管理器。
kubernetes-overview-2-0.png

我们已经学习了在Kubernetes集群上安装复制管理器和服务。你可以自己编写控制器配置文件,或者也可以用已经预写好的配置文件,这些文件应该是由你进行测试。Helm就是为了后一种场景服务的。

Helm允许你安装 chart 。一个chart对于一个Kubernetes的主文件。这些chart可以被Helm社区共享。

让我们安装Helm:
$ mkdir ~/bin $ cd ~/bin $ curl -s https://get.helm.sh | bash 

你可以查看可用的命令:
helm -h 

使用Helm的第一步是从Github上获取最新的chart:
$ helm update ---> Creating /home/user/.helm/config.yaml ---> Checking repository charts ---> Cloning into '/home/user/.helm/cache/charts'...Already up-to-date. ---> Done 

让我们搜索某一个chart:
$ helm search weavescope weavescope - Weave Scope chart 

Weave Scope提供了一个你的Docker容器的可视化地图。可以在 官方产品页 中获取更多信息。

我们可以更详细的了解chart中的信息:
$ 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 

并且我们可以拉取这些chart到我们的工作区中:
$ helm fetch weavescope ---> Fetched chart into workspace /home/user/.helm/workspace/charts/weavescope ---> Done 

Helm总是保存chart的一份拷贝到 ~/.helm/workspace/charts/目录中

所以让我们安装这个Weave Scope chart:
$ helm install weavescope ---> Running `kubectl create -f` ... service "weave-scope-app" created replicationcontroller "weave-scope-app" created daemonset "weave-scope-probe" created 

---> Done # Weave Scope Using Weave Scope with Kubernetes: https://github.com/weaveworks/scope#using-weave-scope-with-kubernetes If you have a scope.weave.works account and want to run Scope in Cloud Service Mode, comment out the line "$(WEAVE_SCOPE_APP_SERVICE_HOST):$(WEAVE_SCOPE_APP_SERVICE_PORT)"] in scope-probe-ds.yaml manifest and uncomment the line below, replacing "foo" with the Service token which you will obtain when logging in to your scope.weave.works account: "--probe.token=foo"] DaemonSets need to be enabled in Kubernetes cluster and all node hosts are run with the Docker socket at /var/run/docker.sock ========================================
让我们检查复制控制器的工作情况:
$ kubectl get rc weave-scope-app NAME              DESIRED   CURRENT   AGE weave-scope-app   1         1         8m 

完美。现在我们应该检查守护进程集的工作情况了:
$ kubectl get ds weave-scope-probe NAME                DESIRED   CURRENT   NODE-SELECTOR   AGE weave-scope-probe   3         3                   10m 

Weave Scope监听4040端口,但是该个端口并没有暴露给我们。所以让我们建立本地端口到远程端口的跳转,这样我们就可以从自己的笔记本电脑上远程访问它了。

获取Pod列表:
$ 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 

我们感兴趣的是 weave-scope-app Pod。

我们能像这样增加一个端口跳转:
$ 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 

现在我们开以用浏览器打开 http://127.0.0.1:4040

你可以看到WeaveScope的界面:
kubernetes-overview-2-1.png

太棒了。所有的东西都能正常工作了!

如果你过后想要卸载Weave Scope,你可以这样做:
$ helm uninstall weavescope -n default 

总结

在Kubernetes微教程的第二部分我们介绍了卷、secret、滚动更新和Helm。Helm是Kubernetes的包管理器,并使安装和管理Kubernetes主文件更加容易。

相关阅读

  • Kubernetes Overview, Part One by Rimantas Mocevicius ON 27 APR 2016
  • Connecting Docker Containers, Part Two by Eddy Mavungu ON 4 MAR 2016
  • Connecting Docker Containers, Part One by Eddy Mavungu ON 26 FEB 2016
  • CoreOS Overview, Part Three by Rimantas Mocevicius ON 12 FEB 2016
  • CoreOS Overview, Part Two by Rimantas Mocevicius ON 5 FEB 2016
  • etcd on CoreOS by Nitish Tiwari ON 3 FEB 2016

原文链接:Kubernetes Overview, Part Two (翻译:高洪涛)

===========================================
译者介绍
高洪涛 ,当当网架构师,开源数据库分库分表中间件 Sharding-JDBC 作者。目前从事Docker相关调研工作。

原文发布时间为:2016-05-09
本文作者:gaohongtao 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:Kubernetes基本要素介绍(下)

推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Nginx Buffer 机制引发的下载故障
    Nginx ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文讨论了在ASP中创建RazorFunctions.cshtml文件时出现的问题,即ASP.global_asax不存在于命名空间ASP中。文章提供了解决该问题的代码示例,并详细解释了代码中涉及的关键概念,如HttpContext、Request和RouteData等。通过阅读本文,读者可以了解如何解决该问题并理解相关的ASP概念。 ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
  • 1、etcnginxconf.ddefault.conf,添加如下信息:location{try_files$uri$urirouter;rootho ... [详细]
author-avatar
AinneJJ
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有