手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

本文详细介绍如何在Kubernetes环境中部署Heapster+InfluxDB+Grafana进行资源监控,并利用GlusterFS实现持久化存储。同时介绍了如何构建私有Docker Registry及使用Ingress控制器实现服务暴露。

紧接上篇手把手教你构建 Kubernetes 1.8 + Flannel 网络(一)

四.Heapster+InfluxDB+Grafana

注意: 时间不同步 Grafana 查看里面不会有数据

项目地址:https://github.com/kubernetes/heapster.git

[root@node1 ~]# git clone https://github.com/kubernetes/heapster.git
[root@node1 ~]# cd heapster/deploy/kube-config/influxdb/
[root@node1 ~]# ls
grafana.yaml  heapster.yaml  influxdb.yaml

手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

我们需要创建三个容器,修改镜像地址为阿里云镜像地址,否则无法 pull 下来镜像

1.Influxdb

[root@node1 influxdb]# vi influxdb.yaml#镜像地址修改为深圳镜像地址(如果下载不下来,分享完会附带资料,每个节点都要导入镜像)image: registry.cn-shenzhen.aliyuncs.com/rancher_cn/heapster-influxdb-amd64:v1.3.3

[root@node1 influxdb]# kubectl  create -f  influxdb.yaml
 kubectl get pods --namespace=kube-system -o wide

2.Grafana

[root@node1 influxdb]# vi   grafana.yaml
#镜像地址修改为深圳镜像地址(如果下载不下来,分享完会附带资料,每个节点都要导入镜像)
image: registry.cn-shenzhen.aliyuncs.com/rancher_cn/heapster-grafana-amd64:v4.4.3
[root@node1 influxdb]# kubectl  create -f  grafana.yaml

3.Heapster

[root@node1 influxdb]# vi heapster.yaml 
#镜像地址修改为深圳镜像地址(如果下载不下来,本文档会附带,每个节点都要导入镜像)
image: registry.cn-hangzhou.aliyuncs.com/outman_google_containers/heapster-amd64:v1.4.0
- --source=kubernetes:http://192.168.31.221:8080?inClusterConfig=false&useServiceAccount=true&auth=

手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

[root@node1 influxdb]# kubectl  create -f  heapster.yaml

4.查看三个容器的状态

手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

5.访问 dashboard 进行测试

http://192.168.0.221:8080/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy/
手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)
手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

http://192.168.31.221:8080/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy/?orgId=1
手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

五.使用glusterfs做持久化存储

1.先安装 gluster 源

yum install centos-release-gluster -y

2.安装 glusterfs 组件

yum install -y glusterfs glusterfs-server glusterfs-fuse glust

3.创建 glusterfs 目录

mkdir /opt/glusterd

4.修改 glusterd 目录

sed -i 's/var\/lib/opt/g' /etc/glusterfs/glusterd.vol

5.启动 glusterfs

systemctl start glusterd.service  && systemctl enable glusterd.service

6.配置 glusterfs

[root@node1 k8s]# vi /etc/hosts #每个节点都要配hosts

手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)
7.开放端⼝

iptables -I INPUT -p tcp --dport 24007 -j ACCEPT

8.创建存储⽬录

mkdir /opt/gfs_data

9.添加节点到集群

# 执⾏操作的本机不需要probe 本机
gluster peer probe node2.example.com
gluster peer probe node3.example.com

10.查看集群状态

gluster peer status
手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

11.配置 volume

GlusterFS 中的 volume 的模式有很多中,包括以下⼏种:

分布卷(默认模式):即DHT, 也叫 分布卷: 将⽂件已hash算法随机分布到 ⼀台服务器节点中存储。

复制模式:即 AFR, 创建 volume 时带 replica x 数量: 将⽂件复制到 replica x 个节点中。

条带模式:即 Striped, 创建 volume 时带 stripe x 数量: 将⽂件切割成数据块,分别存储到 stripe x 个节点中 ( 类似raid 0 )。

分布式条带模式:最少需要4台服务器才能创建。 创建 volume 时 stripe 2 server = 4 个节点: 是 DHT 与 Striped 的组合型。

分布式复制模式:最少需要4台服务器才能创建。 创建 volume 时 replica 2 server = 4 个节点:是 DHT 与 AFR 的组合型。

条带复制卷模式:最少需要4台服务器才能创建。 创建 volume 时stripe 2 replica 2 server = 4 个节点: 是 Striped 与 AFR 的组合型。

三种模式混合: ⾄少需要8台 服务器才能创建。 stripe 2 replica 2 ,每4个节点 组成⼀个 组。

[root@node1 k8s]#   gluster volume create  k8s-volume  node1.example.com:/opt/gfs_data/ node2.example.com:/opt/gfs_data/ node3.example.com:/opt/gfs_data/    force

12.查看 volume 状态

[root@node1 k8s]# gluster volume info

手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

13.启动 分布卷

[root@node1 k8s]# gluster volume start k8s-volume

14.挂载测试

[root@node2 ~]# mount -t glusterfs node1.example.com:k8s-volume /media/
手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

15.配置 endpoints

https://github.com/kubernetes/kubernetes/blob/master/examples/volumes/glusterfs/glusterfs-endpoints.json

{
  "kind": "Endpoints",
  "apiVersion": "v1",
  "metadata": {
    "name": "glusterfs-cluster"
  },
  "subsets": [
    {
      "addresses": [
        {
          "ip": "192.168.0.221"
        }
      ],
      "ports": [
        {
          "port": 1990
        }
      ]
    },
    {
      "addresses": [
        {
          "ip": "192.168.0.222"
        }
      ],
      "ports": [
        {
          "port": 1990
        }
      ]
    }
  ]
}
[root@node1 ~]# kubectl  create -f glusterfs-endpoints.json

查看 endpoints 信息
手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)
创建服务:

https://github.com/kubernetes/kubernetes/blob/master/examples/volumes/glusterfs/glusterfs-service.json

{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "glusterfs-cluster"
  },
  "spec": {
    "ports": [
      {"port": 1990}
    ]
  }
}
[root@node1 ~]# kubectl  create -f glusterfs-service.json 
[root@node1 ~]# kubectl get svc

手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)
16.创建测试 pod

https://github.com/kubernetes/kubernetes/blob/master/examples/volumes/glusterfs/glusterfs-pod.json

"path": "k8s-volume"                #这里改为,gfs卷名字
[root@node1 k8s]# kubectl  create -f glusterfs-pod.json

手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

[root@node1 k8s]#  kubectl exec glusterfs  mount | grep gluster

手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

六.Docker-registry web 私有仓库构建

环境说明:
我们选取 master 192.168.0.221 做私有仓库地址 ( docker-ce 的安装这里不再描述)
使用到的镜像:

docker-registry-web.tar.gz      #镜像仓库web展示
registry-v2.6.2.tar.gz           #镜像仓库容器
docker-registry-web-conf.tar.gz  #创建镜像仓库yaml配置文件

1.查看 docker 版本,配置 hosts 文件

[root@node1 ~]# vi /etc/hosts
192.168.0.221 registry-srv
192.168.0.221 registry-web

手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)
2.导入镜像

[root@node1 ~]# docker load -i  docker-registry-web.tar.gz
[root@node1 ~]# docker load -i  registry-v2.6.2.tar.gz

3.创建容器

[root@node1 ~]# tar -zxvf docker-registry-web-conf.tar.gz

1)启动 registry:

# docker run -v /root/docker-registry-web/conf/registry-srv.yml:/etc/docker/registry/config.yml:ro -v /root/docker-registry-web/conf/auth.cert:/etc/docker/registry/auth.cert:ro -v /data:/var/lib/registry/ -p 5000:5000 --restart=always --name registry-srv -d registry:2.6.2

2)启动 registry-web

# docker run -d -v /root/docker-registry-web/conf/registry-web.yml:/conf/config.yml:ro -v /root/docker-registry-web/conf/auth.key:/conf/auth.key -v /root/docker-registry-web/db:/data -it -p 8081:8080 --link registry-srv --restart=always --name registry-web hyper/docker-registry-web

4.WEB 访问修改 admin 用户权限

http://192.168.0.221:8081/login/auth 账号 admin 密码 admin

手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)
点击, “admin” 用户名,添加上删除和写的权限

5.配置本机使用私有仓库

[root@node1 ~]# echo   '{ "insecure-registries":["registry-srv:5000"] }' >/etc/docker/daemon.json 
[root@node1 ~]# systemctl  restart docker        #重启docker
[root@node1 ~]# docker start  $(docker ps -a -q)   #启动容器

6.上传镜像到 docker registry

[root@node1 ~]# docker login registry-srv:5000 -u'admin' -p'admin'    #登录私有仓库[root@node1 ~]# docker tag 177391bcf802  registry-srv:5000/registry:2.6.2
[root@node1 ~]# docker push  registry-srv:5000/registry:2.6.2

手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)
手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

  1. kubernetes 配置 secret 拉取私仓镜像
    #创建证书
    [root@node1 ~]#  kubectl create secret docker-registry regsecret --docker-server=registry-srv:5000 --docker-username=admin --docker-password=admin --docker-email=admin@example.com

    手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

    [root@node1 ~]# cat k8s/yaml/busybox.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
    name: busybox
    namespace: default
    spec:
    containers:
    - image: registry-srv:5000/busybox:latest
    command:
      - ping  
      - "114.114.114.114"
    imagePullPolicy: IfNotPresent
    name: busybox
    restartPolicy: Always  imagePullSecrets:
    - name: regsecret(红色字体即是,配置镜像拉取,使用该证书)
[root@node1 ~]# kubectl create -f  k8s/yaml/busybox.yaml      #创建容器

手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

七.Kubernetes Nginx Ingress 安装与使用

用过 kubernetes 的人都知道,kubernetes 的 service 的网络类型有三种:

  • cluertip
  • nodeport
  • loadbanlance
    如果一个 service 想向外部暴露服务,有 nodeport 和 loadbanlance 类型。但是 nodeport 类型,你需要知道 service 对应的 pod 所在的 node 的 ip。而 loadbanlance 通常需要第三方云服务商提供支持。如果没有第三方服务商服务的就没办法做了。
    除此之外还有很多其他的替代方式,以下我主要讲解的是通过 ingress 的方式来实现 service的对外服务的暴露。
    镜像地址: (本文会附带所需容器镜像)

registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.8.3(ingress controller 的镜像)

registry.cn-hangzhou.aliyuncs.com/google_containers/defaultbackend:1.0 (默认路由的servcie的镜像)

1.默认实例创建:

[root@node1 ingress]# kubectl  create -f default-http-backend.yaml 
[root@node1 ingress]#  kubectl expose rc default-http-backend --port=80 --target-port=8080  --namespace=kube-system                #重要:为默认实例创建svc

2.ingress-controller 创建

[root@node1 ingress]#  vi    ingress-controller.yaml
value: http://192.168.0.221:8080              #这里是master API地址
                                         #镜像地址建议创建本地容器仓库

[root@node1 ingress]# kubectl  create -f ingress-controller.yaml

3.本实验通过 nginx 容器,这里通过 ingress 做入口访问 svc

[root@node1 ingress]# kubectl create -f  ../k8s/nginx-deployment.yaml   #创建nginx容器
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment 
spec:
  replicas: 3 
  selector:
    matchLabels: 
      app: nginx
  template:
    metadata:
      labels: 
        app: nginx
    spec:
     containers:
     - name: nginx
       image: 192.168.0.221:5000/nginx:v1
       ports:
       - containerPort: 80

[root@node1 ingress]# kubectl create -f  ../k8s/nginx-service.yaml 
apiVersion: v1
kind: Service 
metadata:
  name: nginx-service 
  labels:
    app: nginx 
spec:
  ports:
  - port: 88
    targetPort: 80
  selector: 
    app: nginx
[root@node1 ingress]# kubectl create -f  ingress-nginx.yaml 
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginxservice
spec:
  rules:
  - host: test.info
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80

本机写 host 文件进行访问,外部写 host 文件,指向 node ip 即可
手把手教你构建 Kubernetes 1.8 + Flannel 网络(二)

获取资料的方式

转载于:https://blog.51cto.com/51reboot/2058661

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值