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:

Kubernetes 1.13 完全入门 (4) Controller -- Deployment and rollout

Submitted by Lizhe on Mon, 01/07/2019 - 18:07

Deployment同样为Kubernetes的一个核心内容,主要职责同样是为了保证pod的数量和健康,90%的功能与Replication Controller完全一样,可以看做新一代的Replication Controller。但是,它又具备了Replication Controller之外的新特性:

  • Replication Controller全部功能:Deployment继承了上面描述的Replication Controller全部功能。

  • 事件和状态查看:可以查看Deployment的升级详细进度和状态。

  • 回滚:当升级pod镜像或者相关参数的时候发现问题,可以使用回滚操作回滚到上一个稳定的版本或者指定的版本。

  • 版本记录: 每一次对Deployment的操作,都能保存下来,给予后续可能的回滚使用。

Kubernetes 1.13 完全入门 (3) Controller -- Hroizontal Pod Autoscaler and Rolling update

Submitted by Lizhe on Mon, 01/07/2019 - 10:54

 

Kubernetes 通过Controller来管理Pod.

Controller中定义了Pod的部署特性, 例如有几个副本,在什么样的Node上运行等.

1. ReplicaSet

2. Deployment

3. DaemonSet

4. StatefuleSet

5. Job

下面的内容里我们先使用ReplicaSet来演示如何使用Hroizontal Pod Autoscaler 和 Rolling update

在下一个例子里我们再尝试使用Deployment

Kubernetes 1.13 完全入门 (2) Dashboard 的安装使用

Submitted by Lizhe on Fri, 01/04/2019 - 14:26

 

 


 

安装:

1. 编辑kubernetes-dashboard.yaml

kubernetes-dashboard.yaml

 

 


 

# Copyright 2017 The Kubernetes Authors.

#

# Licensed under the Apache License, Version 2.0 (the "License");

# you may not use this file except in compliance with the License.

# You may obtain a copy of the License at

#

#     http://www.apache.org/licenses/LICENSE-2.0

Kubernetes 1.13 完全入门 (1) 安装

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

 

主要提示: 在开始安装之前, 你需要科学上网, 否则会出现各种各样奇怪的问题, 不能科学上网我建议出门左转

之前尝试了1.5版本之后最近又尝试了一下1.13的最新版, 实际上我并没有觉得kubeadm有多好用, 反而是给自己找了不少麻烦

内容主要参考 https://www.kubernetes.org.cn/4956.html

另外我会额外记录安装过程中的心得和遇到的问题

这里我使用了3台vagrant虚拟机, 安装了 7.4 版本的centos , 之前一直是使用7.1版本, 不过7.1版本缺少一些ipvs模块, 这里建议直接使用更高一点的版本, 7.3(含) 以上版本应该都可以