Kubernetes 1.13 完全入门 (14) ConfigMap

Submitted by Lizhe on Mon, 01/14/2019 - 11:46

Secret 可以为pod提供加密过的信息

一般不用加密的配置信息可以使用 ConfigMap

创建ConfigMap也支持4种方式

1. 通过 --from-literal

[root@master ~]# kubectl create configmap mysql-configmap-1 --from-literal=config1=abc --from-literal=config2=123

configmap/mysql-configmap-1 created

[root@master ~]# kubectl get configmap

NAME                DATA   AGE

mysql-configmap-1   2      6s

[root@master ~]# 

 

Kubernetes 1.13 完全入门 (12) 日志

Submitted by Lizhe on Sat, 01/12/2019 - 20:01

Kubernetes 使用一组附加组件来管理日志. 这些组件包括

Elasticsearch 是一个搜索引擎, 负责存储日志并提供查询接口

Fluentd 负责从Kubernetes搜集日志并发送给Elasticsearch

Kibana 提供了一个Web GUI 

 

安装

对于1.13版本, 可以参考下面的链接

wget https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.13/cluster/addons/fluentd-elasticsearch/es-service.yaml

wget https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.13/cluster/addons/fluentd-elasticsearch/es-statefulset.yaml

Kubernetes 1.13 完全入门 (11) 集群监控

Submitted by Lizhe on Sat, 01/12/2019 - 14:35

Weave Scope 是 Docker 和 Kubernetes 可视化监控工具. Scope 提供了自上而下的集群基础设施和应用的完整视图

书上给的安装命令是

kubectl apply --namespace kube-system -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl version | base64 | tr -d '\n')"

但是在我使用1.13最新版Kubernetes的时候, 遇到了下面的错误

Kubernetes 1.13 完全入门 (10) Mysql 数据例子

Submitted by Lizhe on Fri, 01/11/2019 - 13:43

本章内容是PV, PVC 内容扩展, 我们知道在使用mysql或其他数据库时, 当pod被销毁那么数据就丢失肯定是不行的

下面对于这种情况做具体说明

指导思想是

1. 创建mysql pv

2. 创建mysql pvc

3. 创建mysql Deployment, 并且绑定pvc

4. 最终将pv所在路径映射给 /var/lib/mysql

 

在开始之前请确认nfs服务器配置上加入了no_root_squash

否则后面你可能会遇到 changing ownership of '/var/lib/mysql/': Operation not permitted

[root@localhost /]# cat /etc/exports

Kubernetes 1.13 完全入门 (9) PersistentVolume and PersistentVolumeClaim

Submitted by Lizhe on Fri, 01/11/2019 - 11:02

 

PersistentVolume ( PV ) 是外部存储系统中的一块存储空间, 通常由管理员创建维护, PV具有持久性, 生命周期独立于Pod

PersistentVolumeClaim ( PVC ) 是对PV的申请 ( Claim ). PVC 通常由普通用户创建和维护. 需要为Pod分配存储空间时, 用户可以创建一个PVC, 指明存储资源的容量大小和访问方式等信息, Kubernetes会自动查找并提供满足条件的 PV

下面我们尝试创建一个PV

使用的是上一章中我们在 172.28.128.88 服务器上 /data上的 nfs

[root@master ~]# cat mypv.yaml 

apiVersion: v1

kind: PersistentVolume

metadata:

  name: mypv

spec:

  capacity:

Kubernetes 1.13 完全入门 (8) Volume

Submitted by Lizhe on Thu, 01/10/2019 - 16:03

Pod被销毁后, 数据就会被彻底清理, Kubernetes 使用 Volume来持久保存数据.

Kubernetes Volume 是一个目录, 这一点与 Docker Volume类似.

当 Volume 被创建,并且被mount到 Pod 中之后, Pod 中的所有容器都可以访问这个 Volume.

Kubernetes volume 支持多种 backend 类型, 包括:

emptyDir , hostPath , GCE Persistent Disk , AWS Elastic Block Store , NFS , Ceph 等

https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes

Volume 提供了对各种backend的抽象, 容器在使用 Volume 读写数据的时候不需要关心数据到底是存在本地节点的文件系统还是云硬盘上.

对于Kubernetes本身而言, Volume 都是一个目录

Kubernetes 1.13 完全入门 (7) Health Check

Submitted by Lizhe on Wed, 01/09/2019 - 17:00

每个容器启动时都会执行一个进程, 此进程由Dockerfile的CMD 或 ENTRYPOINT 指定.

如果这个进程退出时返回码为 非零 , 则认为容器发生故障, Kubernetes 就会根据 restartPolicy 重启容器

例如启动tomcat出现了错误, 那么tomcat所在的容器就会被重启

[root@master ~]# cat hcStartFaile.yaml 

apiVersion: v1

kind: Pod

metadata:

  labels:

    test: healthcheck

  name: healthcheck

spec:

  restartPolicy: OnFailure

  containers:

  - name: healthcheck

Kubernetes 1.13 完全入门 (6) Service

Submitted by Lizhe on Wed, 01/09/2019 - 15:46

在Kubernetes中, service从逻辑上代表了一组 Pod , 具体是哪些 Pod 则是由 Label 来挑选的.

这也是为什么在创建一个service的时候需要 selector, 访问这个service实际上就是访问这组 Pod

[root@master ~]# cat getip-svc.yaml 

apiVersion: v1

kind: Service

metadata: 

  name: getip-service

spec:

  type: NodePort

  ports:

    - port: 30009

      nodePort: 30009

      targetPort: 30009

  selector: 

Kubernetes 1.13 完全入门 (5) DaemonSet and Job

Submitted by Lizhe on Wed, 01/09/2019 - 09:45

DaemonSet

Deployment 和 RC 部署的Pod会分布在各个Node上, 每个Node都可能运行好几个副本.

DaemonSet 的不同之处在于, 每个Node上最多只能运行一个副本

典型的应用场景有:

1. 存储

2. 日志

3. 监控

[root@master ~]# cat getip-daemon.yaml 

apiVersion: extensions/v1beta1

kind: DaemonSet

metadata:

  name: getip-daemon

spec:

  template:

    metadata:

      labels:

        app: getip-daemon

    spec: