五月 2016

Kubernetes 中的 Persistent Volumes

经过一番实验,证明,这东西除了抽象,没啥鸟用,直接挂 Volume 应该是目前最佳选择。

持久卷 PersistentVolumes

本文描述了 Kubernetes 中的 PersistentVolumes。要求读者有对卷 (volumes) 所有了解。

简介

存储管理跟计算管理是两个不同的问题。PersistentVolume 子系统,对存储的供应和使用做了抽象,以 API 形式提供给管理员和用户使用。要完成这一任务,我们引入了两个新的 API 资源:PersistentVolume(持久卷)PersistentVolumeClaim(持久卷申请)

PersistentVolume(PV)是集群之中的一块网络存储。跟 Node 一样,也是集群的资源。PV 跟 Volume (卷) 类似,不过会有独立于 Pod 的生命周期。这一 API 对象包含了存储的实现细节,例如 NFS、iSCSI 或者其他的云提供商的存储系统。

Kubernetes 服务定义示例

Tags: 
---
kind: List
apiVersion: v1
items:
- kind: ReplicationController
  apiVersion: v1
  metadata:
    name: rc-nginx-meta
    labels:
      name: rc-nginx
  spec:
    replicas: 1
    # 必须跟 template 里面的 labels 匹配
    selector:
      name: pod-nginx
    template:
      metadata:
        labels:
          name: pod-nginx
      spec:
        containers:
        - name: nginx-docker-images
          image: nginx:1.10
          # 开放端口数组
          ports:
          - containerPort: 80
            protocol: TCP
          # 环境变量数组
          env:
          - name: NGINX_PORT

kubectl config 文件示例

Tags: 
apiVersion: v1
kind: Config
# Clusters 一节用于存储对多个 Master 的定义,大致包含证书,服务器地址等信息
clusters:
- cluster:
    certificate-authority: certs/pd/ca.crt
    server: https://10.211.55.87:6443
  name: pd-secure
# Users 一节用于存储用户凭据,可对应 Token, Basic 等验证方法
users:
- name: fake-user
  user:
    password: password
    username: admin  
# Contexts 这里会用上面的集群和用户信息,来形成完整的连接信息
contexts:
- context:
    cluster: pd-secure
    namespace: kube-system
    user: fake-user
  name: pd-local
# 当前生效的 Context,可以利用 kubectl config use-context 来切换
current-context: pd-local
preferences: {}

Ansible Playbook 拼接字符串

目前使用 Playbook 方式进行部署的一般是集群系统,面对不定数量的一组 Host,经常需要利用这一组主机的信息来拼接为一个字符串,以此结果设置为变量,其他需要集群信息的配置文件/命令行参数就可以引用这一信息了。

下面代码以一组 Host 生成形如 server1=ip1:port,server2=ip1:port 的结果。

Host 信息: