服务的监控与调度
Hello
好久不见,甚是想念,小刘今天来和大家谈谈容器的的图形化界面 ,主要还是 图形化界面的方面
一、Prometheus
Prometheus简介:
Prometheus
是由 SoundCloud
开发的开源监控报警系统和时序列数据库。 Prometheus
使用 Go
语言开发,是 Google BorgMon
监控系统的开源版本。2016年由 Google
发起 Linux
基金会旗下的原生云基金会, 将 Prometheus
纳入其下第二大开源项目, Prometheus
目前在开源社区相当活跃。
Prometheus
和 Heapster
(Heapster
是 K8S
的一个子项目,用于获取集群的性能数据)相比功能更完善、更全面。 Prometheus
性能也足够支撑上万台规模的集群。
组件说明:
MetricServer
:是K8S
集群资源使用情况的聚合器,收集数据给K8S
集群内使用,如kubectl
、hpa
、scheduler
等PrometheusOperator
:是一个系统监测和警报工具箱,用来存储监控数据。NodeExporter
:用于各node
的关键度量指标状态数据。KubeStateMetrics
:收集K8S
集群内资源对象数据,制定告警规则。Prometheus
:采用pull
方式收集apiserver
,scheduler
,controller-manager
,kubelet
组件数据,通过http
协议传输Grafana
:是可视化数据统计和监控平台
Prometheus 安装:
[root@master prometheus]
[root@master prometheus]
[root@master manifests]
[root@master manifests]
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 2/2 Running 0 99s
alertmanager-main-1 2/2 Running 0 88s
alertmanager-main-2 2/2 Running 0 77s
grafana-7dc5f8f9f6-tlv9t 1/1 Running 0 3m20s
kube-state-metrics-5cbd67455c-tpxrv 4/4 Running 0 3m13s
node-exporter-gcgjr 2/2 Running 0 3m19s
node-exporter-jtps7 2/2 Running 0 3m19s
node-exporter-ndx2l 2/2 Running 0 3m19s
prometheus-adapter-668748ddbd-npsg2 1/1 Running 0 3m19s
prometheus-k8s-0 3/3 Running 1 99s
prometheus-k8s-1 3/3 Running 1 99s
prometheus-operator-7447bf4dcb-wd7sw 1/1 Running 0 3m20s
[root@master manifests]
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master 192m 1% 1224Mi 65%
worker1 92m 0% 1147Mi 60%
worker2 91m 0% 1043Mi 55%
[root@master manifests]
NAME CPU(cores) MEMORY(bytes)
deamonset-example-t9bfr 0m 2Mi
deamonset-example-v6lxj 0m 2Mi
访问 prometheus
( http://192.168.182.100:30200
):
除了页面可点击获取的信息外, prometheus
的 WEB
界面上提供了基本的查询 K8S
集群中每个 Pod
的 CPU
使用情况,查询条件如下:
sum by (pod_name)( rate(container_cpu_usage_seconds_total{image!="", pod_name!=""}[1m] ) )
访问 grafana
( http://192.168.182.100:30100
): 初始密码均为 admin
grafana
提供一个更人性化的图形化监控界面:
二、Horizontal Pod Autoscaling
工作节点安装 hpa
实例镜像
[root@worker1 ~]
[root@worker1 ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
gcr.io/google_containers/hpa-example latest 4ca4c13a6d7c 4 years ago 481MB
Horizontal Pod Autoscaling
可以根据 CPU
利用率自动伸缩一个 Replication Controller
、 Deployment
或者 Replica Set
中的 Pod
数量:
[root@master prometheus]
[root@master prometheus]
[root@master prometheus]
NAME READY UP-TO-DATE AVAILABLE AGE
php-apache 1/1 1 1 3m56s
[root@master prometheus]
NAME READY STATUS RESTARTS AGE
php-apache-f44dcdb46-hxsc9 1/1 Running 0 7s
创建 HPA
控制器:
[root@master prometheus]
增加负载,查看负载节点数目:
$ kubectl run -i --tty load-generator --image=busybox /bin/sh
$ while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done
查看 hpa
、 pod
状态:
[root@master prometheus]
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 0%/50% 1 10 1 3m16s
php-apache Deployment/php-apache 0%/50% 1 10 1 3m18s
php-apache Deployment/php-apache 384%/50% 1 10 1 3m33s
[root@master prometheus]
NAME READY STATUS RESTARTS AGE
php-apache-f44dcdb46-dc9v6 1/1 Running 0 93m
php-apache-f44dcdb46-hhj25 1/1 Running 0 93m
php-apache-f44dcdb46-hqfv9 1/1 Running 0 93m
php-apache-f44dcdb46-hxsc9 1/1 Running 0 98m
[root@master prometheus]
NAME CPU(cores) MEMORY(bytes)
php-apache-f44dcdb46-dc9v6 0m 8Mi
php-apache-f44dcdb46-hhj25 0m 8Mi
php-apache-f44dcdb46-hqfv9 0m 14Mi
三、资源限制
Pod:
Kubernetes
对资源的限制实际上是通过 cgroup
来控制的, cgroup
是容器的一组用来控制内核如何运行进程的相关属性集合。针对内存、 CPU
和各种设备都有对应的 cgroup
。
默认情况下, Pod
运行没有 CPU
和内存的限额。这意味着系统中的任何 Pod
将能够像执行该 Pod
所在的节点一样,消耗足够多的 CPU
和内存。一般会针对某些应用的 pod
资源进行资源限制,这个资源限制是通过 resources
的 requests
和 limits
来实现。
spec:
containers:
- image: xxxx
imagePullPolicy: Always
name: auth
resources:
limits:
cpu: "4"
memory: 2Gi
requests:
cpu: 250m
memory: 250Mi
requests
要分分配的资源, limits
为最高请求的资源值。可以简单理解为初始值和最大值。
名称空间:
计算资源配额:
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
spec:
hard:
pods: "20"
requests.cpu: "20"
requests.memory: 100Gi
limits.cpu: "40"
limits.memory: 200Gi
配置对象数量配额限制:
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-counts
spec:
hard:
configmaps: "10"
persistentvolumeclaims: "4"
replicationcontrollers: "20"
secrets: "10"
services: "10"
services.loadbalancers: "2"
配置CPU和内存LimitRange:
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 50Gi
cpu: 5
defaultRequest:
memory: 1Gi
cpu: 1
type: Container
好了,我继续来学习下,其他的图形化界面
DockerUI
简介
一个基于Docker API提供图形化页面的容器管理系统,支持简单的镜像管理、容器管理。
创建镜像
方法一
输入以下命令
docker run -d \
-p 9000:9000 \
-v /var/run/docker.sock:/docker.sock \
-e="/docker.sock" \
--name dockerui abh1nav/dockerui:latest
查看dockerui镜像文档
输入网址访问
方法二
通过Rest API管理(视频中未详细讲解)
[](javascript:void(0)😉
$docker run -d \
-p 9000:9000 \
--name dockerui \
-e "http://<dockerd host ip>:2375" \
abhlnav/dockerui:latest \
http://<dockerd host ip>:9000
[](javascript:void(0)😉
Shipyard
简介
基于Docker API实现的容器图形管理系统,支持container、images、engine、cluster等功能,满足基本容器部署需求,比DockerUI强大。
分为手动部署跟自动部署
所涉及的镜像:
手动部署
查看官方说明文档
https://shipyard-project.com/manual-deployment/
照着命令敲即可
使用默认账号admin,密码Shipyard登录查看
创建跟使用查询资料
使用到的命令
ps –ef | grep docker
ps –ef |grep ssh
看完《Docker技术入门与应用实战》视频第7章图形页面管理
自动部署
打开帮助文档
执行一条命令即可
curl –sSL https://shipyard-project.com/deploy | bash –s
将新节点加入swarm集群中命令
1、Rancher介绍
Rancher是一个开源的企业级容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。
Rancher组成
-
基础设施编排
Rancher可以使用任何公有云或者私有云的Linux主机资源。Linux主机可以是虚拟机,也可以是物理机。Rancher仅需要主机有CPU,内存,本地磁盘和网络资源。从Rancher的角度来说,一台云厂商提供的云主机和一台自己的物理机是一样的。
Rancher为运行容器化的应用实现了一层灵活的基础设施服务。Rancher的基础设施服务包括网络,存储,负载均衡,DNS和安全模块。Rancher的基础设施服务也是通过容器部署的,所以同样Rancher的基础设施服务可以运行在任何Linux主机上。
-
容器编排与调度
很多用户都会选择使用容器编排调度框架来运行容器化应用。Rancher包含了当前全部主流的编排调度引擎,例如Docker Swarm, Kubernetes和Mesos。同一个用户可以创建Swarm或者Kubernetes集群。并且可以使用原生的Swarm或者Kubernetes工具管理应用。
除了Swarm,Kubernetes和Mesos之外,Rancher还支持自己的Cattle容器编排调度引擎。Cattle被广泛用于编排Rancher自己的基础设施服务以及用于Swarm集群,Kubernetes集群和Mesos集群的配置,管理与升级。
-
应用商店
Rancher的用户可以在应用商店里一键部署由多个容器组成的应用。用户可以管理这个部署的应用,并且可以在这个应用有新的可用版本时进行自动化的升级。Rancher提供了一个由Rancher社区维护的应用商店,其中包括了一系列的流行应用。Rancher的用户也可以创建自己的私有应用商店。
- 企业级权限管理
Rancher支持灵活的插件式的用户认证。支持Active Directory,LDAP, Github等 认证方式。 Rancher支持在环境级别的基于角色的访问控制 (RBAC),可以通过角色来配置某个用户或者用户组对开发环境或者生产环境的访问权限。
Rancher展示
Web管理界面-简单易用
环境管理
环境和环境模板-支持多种调度器。
主机管理
应用商店
负载均衡
部署NFS连接外部存储
2、Rancher安装
采用docker方式安装。
(1)镜像下载
[docker@docker ~]$ docker search rancher
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
rancher/server Rancher 1.x Server Container 520
rancher/agent 90
rancher/rancher A container management platform built for ... 62
rancher/os Rancher OS installation container 39
cdrx/rancher-gitlab-deploy Painless deployment of projects built with... 20 [OK]
rancher/k8s Rancher Kubernetes Images 17
janeczku/rancher-letsencrypt Rancher service that obtains and manages S... 14 [OK]
adi90x/rancher-active-proxy All in one active reverse proxy for Rancher ! 11 [OK]
infinityworks/prometheus-rancher-exporter Exposes Service/Stack/Host status from the... 7 [OK]
rawmind/rancher-traefik This image is the traefik dinamic conf for... 4 [OK]
identt/rancher-compose Alpine images with rancher-compose included 2 [OK]
rancher/healthcheck 2
rancher/rancher-agent 2
rawmind/rancher-zk zookeeper service to run in rancher 1 [OK]
rancher/dns 1
rancher/net 1
rancher/scheduler 1
rancher/metadata 0
hivesolutions/rancher_bot Simple bot for Rancher automation. 0 [OK]
camptocamp/prometheus-rancher-metadata-conf rancher-metadata confd prometheus template 0 [OK]
camptocamp/fetch-rancher-certificate Fetch rancher certificate from cattle API 0 [OK]
markharrison17/dapi-pipeline-rancher Repo for the DSS API Pipeline rancher cont... 0
janeczku/datadog-rancher-init Sidekick image for deploying DataDog Agent... 0 [OK]
arwineap/concourse-rancher-compose-resource concourse rancher compose resource 0 [OK]
markharrison17/dapi-rancher DSS API Rancher control 0
(2)容器运行
[docker@docker ~]$ docker run --name rancher-server -p 8000:8080 -v /etc/localtime:/etc/localtime:ro -d rancher/server
a4a32619551c9c1ffd4c11f7c1da5d0297fa5bdf6eea103f045bbc837ea88f65
至此,安装完成,访问http://192.168.1.200:8000 ,体验吧。