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目录中读取usernamepassword文件。其中包含了你在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集群上安装复制管理器和服务。你可以自己编写控制器配置文件,或者也可以用已经预写好的配置文件,这些文件应该是由你进行测试。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         <none>          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-appPod。

我们能像这样增加一个端口跳转:

$ 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的界面:

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

如果你过后想要卸载Weave Scope,你可以这样做:

$ helm uninstall weavescope -n default

总结

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

相关阅读

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

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

原文发布时间为:2016-05-09

本文作者:gaohongtao 

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:Kubernetes基本要素介绍(下)

时间: 2024-09-17 04:42:30

Kubernetes基本要素介绍(下)的相关文章

Kubernetes基本要素介绍

本文讲的是Kubernetes基本要素介绍,[编者的话]Rimas Mocevicius是云计算. CoreOS . Kubernetes .DEIS和应用程序容器解决方案架构师 .CoreOS Essentials一书作者.目前就职于DEIS.本文是其发表在DEIS上的官方博客,介绍Kubernetes的系列教程的第一篇. Kubernetes是在群集中管理跨多台主机容器化应用的开源系统. Kubernetes提供了应用部署.调度.更新.维护和扩缩的机制.Kubernetes的一个重要特点是,

简单介绍下 PHP5 中引入的 MYSQLI的用途_php基础

在新下载的PHP5中你会发现多了一个mysqli.dll,它是干什么用的呢?我简单介绍下... mysqli.dll是PHP对mysql新特性的一个扩展支持.在PHP5中可以在php.ini中加载. mysql后面的i,指improved, interface, ingenious, incompatible or incomplete(改扩展仍在开发中,因为MYSQL4.1和MYSQL5都没有正式推出尚在开发中,新的特性没有完全实现) mysqli想实现的目标具体有: -更简单的维护 -更好的

工厂模式-谁能给我简单介绍下设计模式。

问题描述 谁能给我简单介绍下设计模式. 单例有什么用? 什么情况下用到单例模式? 以及什么是工厂模式,工厂模式有什么用,什么情况会用到工厂模式?概念上很模糊,希望大神能给讲解下. 解决方案 1.FACTORY--工程模式? 追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说"来四个鸡翅"就行了.麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开.消费者任何时候需要某种产品,只需向工厂

通信 can总线-车辆网关的路由表里,表头里各单词是什么意思?能详细介绍下吗?

问题描述 车辆网关的路由表里,表头里各单词是什么意思?能详细介绍下吗? 解决方案 信号名 位置 消息id dlc(不知道什么的缩写) 消息id 位置

问个可啥的r语言问题,lm(a~b)的~是啥意思,以及可以简单介绍下lm么?

问题描述 问个可啥的r语言问题,lm(a~b)的~是啥意思,以及可以简单介绍下lm么? 同题-- 实在太傻我自己都不好意思问,奈何真的是初学者-- lm(a~b)的~是什么意思?以及可以简单给我说下lm是啥么? 解决方案 线性回归模型,a是应变量,b是自变量 解决方案二: R 中的lm函数能够做线性拟合,恰如函数的名字:lm= linear model. lm(a~b)就是对a=k*b+c进行线性拟合

微信系统做星座分析的朋友介绍下经验

问题描述 微信系统做星座分析的朋友介绍下经验 微信系统做星座分析的朋友介绍下经验:请问在微信中如何实现自动读取qq信息中的星座血型? 解决方案 http://blog.csdn.net/yueqinglkong/article/details/25237351 解决方案二: 在微信公众平台做HTML 5游戏的一些经验

想自学Android,请问各位大大有什么好的书籍介绍下

问题描述 如题,本人想自学Android,不知道从何学起,也不知道要买什么书籍才适合我这种没入门的菜鸟.有哪位高手能介绍下,谢谢 解决方案 我当初是看<Android开发入门与实践>的,网下找得到附带的课程代码和视频. 我就看了前面几章,就直接边学变实践了. 多看demo,api,源码吧.解决方案二:书看了入了门大部分时间看源码比较好!解决方案三:还是看文档最有用,耐心点,你会很有收获的,现在市面上很多书都是抄来抄去的,甚至有些源码都是一模一样的.太多作者都是急功近利没一点责任心.

(如图)请各位大神介绍下 visual studio 中的调试、测试和parasoft

问题描述 (如图)请各位大神介绍下 visual studio 中的调试.测试和parasoft 解决方案 不懂楼主想表达什么, 调试不就下断点, 开始调试, 设置调试的条件变量, 查看变量值, 查看callstack, 查看内存等么? parasoft 这个没用过呢.

给大家介绍下主流的PHP程序网站应用

做网站的时候选择程序很关键,如果选错了程序,网站发展起来后向更换是不太好的;如果没有程序人员的协助,某些程序甚至无法进行转换. 我觉得选择程序主要的因素很多:程序的功能.程序的执行效率.程序的开发团队力量和后续开发力度.根据不建设不同的网站,我们有不同的选择.今天我们作为中国第一大linux php虚拟主机提供商给大家介绍下主流的PHP程序. 如果要建设一个地方门户,Php168, phpcms和康盛公司的supsite是不错的选择,这三家都是目前这个领域的大公司,程序拥有地方门户所需的主流功(