k8s 容器编排(下)

2020-08-11  本文已影响0人  Linux运维

1.k8s附加组件
2.k8s弹性伸缩
3.k8s持久化存储
4.使用jenkins实现k8s持续更新
5.k8s 高可用


一、k8s 附加组件

1.dns服务

①k8s中的service分配的虚拟IP是固定的,而pod异常后新生成的pod ip会发生变化,可以通过service做代理关联到后端的pod。
.
②通过设置k8s中的dns服务可以直接解析service的名字,得到对应service的ip,可以实现服务在集群内部互相访问。

安装dns服务

1:下载dns_docker镜像包
wget http://192.168.37.200/191127/docker_k8s_dns.tar.gz

2:导入dns_docker镜像包

3:创建dns服务(固定到一个后端node节点)
通过编写deployment和service的yml文件创建

4:检查
kubectl get all --namespace=kube-system

5:修改所有node节点kubelet的配置文件,并重启kubelet服务
vim  /etc/kubernetes/kubelet
KUBELET_ARGS="--cluster_dns=10.254.230.254 --cluster_domain=cluster.local"
​
2.namespace命名空间

作用:进行资源的隔离,一个业务一个space,互不影响。

1.创建 namespace
kubectl create namespace wordpress

2.在yml文件中应用,放在元数据下
...
metadata:
  namespace: wordpress
...

3.查看该空间的资源
kubectl get all -n wordpress

3.健康检查和可用性检查

(1).探针的种类

livenessPort:健康状态检查,周期性检查服务是否存活,检查结果失败,将重启容器
.
readlinessPort:可用性检查,周期性检查服务是否可用,不可用将从service的endpoints中移除

(2).探针的检测方法

exec:执行一段命令,返回值为0(正常)或非0(不正常)
.
httpGet:检查http请求的返回状态码
.
tcpSocket:测试某个端口是否能够连接

(3).liveness探针

探针写在containers模块下,参数不写就使用默认值

#1.exec
...
      livenessProbe:
        exec:
          command:
            - cat
            - /tmp/healthy
        initialDelaySeconds: 5    #第一次检查开始时间
        periodSeconds: 5          #检查周期
        timeoutSeconds: 3         #超时时间
        successThreshold: 1       #检查通过1次,就是成功
        failureThreshold: 1       #检查不通过1次就算失败
...

#2.httpGet
...
      livenessProbe:
        httpGet:
          path: /index.html
          port: 80
        initialDelaySeconds: 3
        periodSeconds: 3
...

#3.tcpSocket
...
      livenessProbe:
        tcpSocket:
          port: 80
        initialDelaySeconds: 10
        periodSeconds: 3
...

(4).readliness探针

#httpGet
...
        readinessProbe:
          httpGet:
            path: /qiangge.html
            port: 80
          initialDelaySeconds: 3
          periodSeconds: 3
...
4.kubernets dashboard 服务

(1)上传并导入镜像,打标签

(2)master节点创建dashboard的deployment和service资源

(3)访问http://IP:8080/ui

5.通过apiservice反向代理service
第一种:NodePort类型 
  type: NodePort
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30008
​
第二种:ClusterIP类型
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 80

http://10.0.0.11:8080/api/v1/proxy/namespaces/命令空间/services/service的名字/

二、k8s 弹性伸缩

1.heapster 监控

1.上传并导入镜像,打标签

监控(heapster)
存储数据(influxdb)
出图(grafana)

2.master节点创建相应的deployment和service资源

3.打开 dashbord 进行验证

2.弹性伸缩

三、k8s 持久化存储

1.emptyDir 空目录方式

使用场景: 在同一 个Pod里,不同的容器,共享数据卷。
.
如果容器被删除,数据仍然存在,如果Pod被 删除,数据也会被删除。

...
    spec:
      nodeName: 10.0.0.13
      volumes:          #宿主机中的挂载点
      - name: mysql
        emptyDir: {}        #挂载到一个空目录,可以用docker inspect 查看
      containers:
        - name: wp-mysql
          image: 10.0.0.11:5000/mysql:5.7
          imagePullPolicy: IfNotPresent
          ports:
          - containerPort: 3306
          volumeMounts:          #容器挂载的的目录,并未该目录命名
          - mountPath: /var/lib/mysql
            name: mysql
...
2.hostPath

类似于docker 中的数据卷

介绍

hostPath宿主机路径,宿主机的文件系统的某一目录和pod建立关联关系,在pod删除时,存储数据不会丢失。但宿主机挂了,hostPath也就没用了。

...
    spec:
      nodeName: 10.0.0.12
      volumes:
      - name: mysql
        hostPath:
          path: /data/wp_mysql
      containers:
        - name: wp-mysql
          image: 10.0.0.11:5000/mysql:5.7
          imagePullPolicy: IfNotPresent
          ports:
          - containerPort: 3306
          volumeMounts:
          - mountPath: /var/lib/mysql
            name: mysql
...
3.nfs

不同node节点间的数据共享、

      volumes:
      - name: mysql
        nfs:
          path: /data/wp_mysql
          server: 10.0.0.11
4.pv & pvc

使用场景:http://img2020.cnblogs.com/blog/711773/202006/711773-20200606111557348-1778227999.png
1.介绍

①pv:persistent volume 全局资源,k8s集群
.
②pvc:persistent volume claim 局部资源属于某一个namespace
.
原理:
PVC:描述 Pod想要使用的持久化属性,比如存储大小、读写权限等
PV:描述一个具体的Volume属性,比如Volume的类型、挂载目录、远程存储服务器地址等

2.创建 pv

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv1      # pv的名字
  labels:
    type: nfs001
spec:
  capacity:
    storage: 10Gi      # pv 的空间大小 
  accessModes:
    - ReadWriteMany 
  persistentVolumeReclaimPolicy: Recycle        # pv 的回收规则
  nfs:
    path: "/data/pv1"      #挂载宿主机的目录
    server: 10.0.0.11

#创建pv所要挂载的目录
mkdir -p /data/pv{1..3}

3.创建 pvc

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: tomcat-mysql
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi      # pvc 的空间大小

4.创建pod,使用 PVC(可以通过kubectl explian查看帮助)

      volumes:
      - name: mysql
        persistentVolumeClaim:
          claimName: tomcat-mysql
5.分布式存储 glusterfs

1.什么是glusterfs

Glusterfs是一个开源分布式文件系统,具有强大的横向扩展能力,可支持数PB存储容量和数千客户端,通过网络互联成一个并行的网络文件系统。具有可扩展性、高性能、高可用性等特点。

2.glusterfs 的实现

1.所有节点 安装 glusterfs ,并启动
yum install centos-release-gluster6.noarch -y
yum install  glusterfs-server -y

2.为gluster集群增加存储单元brick
echo '- - -' >/sys/class/scsi_host/host0/scan 
echo '- - -' >/sys/class/scsi_host/host1/scan 
echo '- - -' >/sys/class/scsi_host/host2/scan  
mkfs.xfs /dev/sdb
mkfs.xfs /dev/sdc
mkfs.xfs /dev/sdd
mkdir -p /gfs/test1
mkdir -p /gfs/test2
mkdir -p /gfs/test3
mount /dev/sdb /gfs/test1
mount /dev/sdc /gfs/test2
mount /dev/sdd /gfs/test3


3.添加存储资源池
master节点:
gluster peer probe k8s-node1
gluster peer probe k8s-node2
gluster pool list

4.glusterfs 卷的管理
#创建分布式复制卷
gluster volume create che replica 2 k8s-master:/gfs/test1 k8s-node-1:/gfs/test1 k8s-master:/gfs/test2  k8s-node-1:/gfs/test2 force
#启动卷
gluster volume start che
#查看卷
gluster volume info che 
#挂载卷
mount -t glusterfs 10.0.0.11:/gluster volume add-brick che k8s-node-2:/gfs/test1 k8s-node-2:/gfs/test2 forceche /mnt
#扩容

6.k8s 对接 glusterfs

endpoint 可以连接外部服务

apiVersion: v1
kind: Endpoints
metadata:
  name: mysql
  namespace: tomcat
subsets:
- addresses:
  - ip: 10.0.0.13
  ports:
  - port: 3306
    protocol: TCP

四、使用jenkins实现k8s持续更新

操作过程:
1.安装jenkins
2.访问jenkins
3.配置jenkins拉取gitlab代码数据
4.拉取代码测试
5.编写dockerfile并测试
6.上传dockerfile到代码私有仓库
7.点击jenkins立即构建,自动构建docker镜像并上传到本地镜像私有仓库

五、k8s 高可用

操作过程:
1.安装配置 etcd 高可用 集群
2.安装配置一台与 控制节点master 环境一样的主机
3.两台 master 节点安装配置 Keppalived
4.所有node节点配置指向 api-server的vip

上一篇 下一篇

猜你喜欢

热点阅读