之前我们一直都是使用命令行来管理K8S的,这种做法虽然对程序员来说看起来很炫酷,但有时候用起来还是挺麻烦的。
今天我们来介绍2个K8S可视化管理工具KubeSphere和Rancher,使用它可以大大减少我们管理K8S的工作量,希望对大家有所帮助!
kubesphere功能说明
kubernetes资源管理
对底层 Kubernetes 中的多种类型的资源提供可视化的展示与监控数据,以向导式 UI 实现工作负载管理、镜像管理、服务与应用路由管理 (服务发现)、密钥配置管理等,并提供弹性伸缩 (HPA) 和容器健康检查支持,支持数万规模的容器资源调度,保证业务在高峰并发情况下的高可用性。
微服务治理
灵活的微服务框架:基于 Istio 微服务框架提供可视化的微服务治理功能,将 Kubernetes 的服务进行更细粒度的拆分
完善的治理功能:支持熔断、灰度发布、流量管控、限流、链路追踪、智能路由等完善的微服务治理功能,同时,支持代码无侵入的微服务治理
多租户管理
多租户:提供基于角色的细粒度多租户统一认证与三层级权限管理
统一认证:支持与企业基于 LDAP / AD 协议的集中认证系统对接,支持单点登录 (SSO),以实现租户身份的统一认证
权限管理:权限等级由高至低分为集群、企业空间与项目三个管理层级,保障多层级不同角色间资源共享且互相隔离,充分保障资源安全性
DevOps
开箱即用的 DevOps:基于 Jenkins 的可视化 CI / CD 流水线编辑,无需对 Jenkins 进行配置,同时内置丰富的 CI/CD 流水线插件
CI/CD 图形化流水线提供邮件通知功能,新增多个执行条件为流水线、s2i、b2i 提供代码依赖缓存支持
端到端的流水线设置:支持从仓库 (Git/ SVN / BitBucket)、代码编译、镜像制作、镜像安全、推送仓库、版本发布、到定时构建的端到端流水线设置
安全管理:支持代码静态分析扫描以对 DevOps 工程中代码质量进行安全管理
日志:日志完整记录 CI / CD 流水线运行全过程
快速构建与发布
提供对代码(Source-to-Image)或者制品(Binary-to-Image)进行快速容器化的工具,无需编写 dockerfile,仅需要通过简单的设置即可将制品和代码构建成服务。
支持从已有的代码仓库中获取代码,或通过上传制品的方式,自动构建镜像和完成部署,并将镜像推送至目标仓库,每次构建镜像和服务的过程将以任务 (Job) 的方式去完成。
多维度监控
KubeSphere 全监控运维功能可通过可视化界面操作,同时,开放标准接口,易于对接企业运维系统,以统一运维入口实现集中化运维
立体化秒级监控:秒级频率、双重维度、十六项指标立体化监控
在集群资源维度,提供 CPU 利用率、内存利用率、CPU 平均负载、磁盘使用量、inode 使用率、磁盘吞吐量、IOPS、网卡速率、容器组运行状态、ETCD 监控、API Server 监控等多项指标
在应用资源维度,提供针对应用的 CPU 用量、内存用量、容器组数量、网络流出速率、网络流入速率等五项监控指标。并支持按用量排序和自定义时间范围查询,快速定位异常
提供按节点、企业空间、项目等资源用量排行
提供服务组件监控,快速定位组件故障
自研多租户告警系统
支持基于多租户、多维度的监控指标告警,目前告警策略支持集群管理员对节点级别和租户对工作负载级别等两个层级
灵活的告警策略:可自定义包含多个告警规则的告警策略,并且可以指定通知规则和重复告警的规则
丰富的监控告警指标:提供节点级别和工作负载级别的监控告警指标,包括容器组、CPU、内存、磁盘、网络等多个监控告警指标
灵活的告警规则:可自定义某监控指标的检测周期长度、持续周期次数、告警等级等
灵活的通知发送规则:可自定义发送通知时间段及通知列表,目前支持邮件通知
自定义重复告警规则:支持设置重复告警周期、最大重复次数并和告警级别挂钩
日志查询与收集
提供多租户日志管理,在 KubeSphere 的日志查询系统中,不同的租户只能看到属于自己的日志信息,支持中文日志检索,支持日志导出
多级别的日志查询 (项目/工作负载/容器组/容器以及关键字)、灵活方便的日志收集配置选项等
支持多种日志收集平台,如 Elasticsearch、Kafka、Fluentd
对于将日志以文件形式保存在 Pod 挂盘上的应用,支持开启落盘日志收集功能
应用商店
基于开源的 OpenPitrix 提供应用商店和应用仓库服务
支持应用上传、应用审核、应用上架与分类、应用部署,为用户提供应用全生命周期管理功能
用户基于应用模板可以快速便捷地部署一个完整应用的所有服务
基础设施管理
提供存储类型管理、主机管理和监控、资源配额管理,并且支持镜像仓库管理、权限管理、镜像安全扫描。内置 Harbor 镜像仓库,支持添加 Docker 或私有的 Harbor 镜像仓库。
多存储类型支持
支持 GlusterFS、CephRBD、NFS 等开源存储方案,支持有状态存储
NeonSAN CSI 插件对接 QingStor NeonSAN,以更低时延、更加弹性、更高性能的存储,满足核心业务需求
QingCloud CSI 插件对接 QingCloud 云平台各种性能的块存储服务
多网络方案支持
支持 Calico、Flannel 等开源网络方案
开发了适用于物理机部署 Kubernetes 的 负载均衡器插件 Porter
CentOS7下离线安装KubeSphere3.0集群
步骤1:准备条件
准备三台CentOS7.9的Linux主机
主机 IP 主机名称 角色
192.168.78.10 master master, etcd
192.168.78.12 node1 worker
192.168.78.13 node2 worker
要求
KubeKey 使用 /var/lib/docker 作为默认路径来存储所有 Docker 相关文件(包括镜像)
因此建议添加附加存储卷,分别给 /var/lib/docker 和 /mnt/registry 挂载至少 100G
wget https://kubesphere-installer.pek3b.qingstor.com/offline/v3.0.0/kubesphere-all-v3.0.0-offline-linux-amd64.tar.gz
SSH 免密
# 无交互初始化key
# ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
# cat ~/.ssh/id_rsa.pub 将所有节点的公共key收集后集中写入authorized_keys文件
# vi ~/.ssh/authorized_keys
# ssh -o stricthostkeychecking=no xxx # 首次登录免输入yes
#云端一般采用key登录,而且不会提供root密码,以下方式需要输入root密码,一般不适用,需要另外通过工具(比如saltstack)做authorized_keys文件的分发
# ssh-copy-id -i ~/.ssh/id_rsa.pub [[email protected]](mailto:[email protected])
在离线环境中,可以使用私有包、RPM 包(适用于 CentOS)来安装这些依赖项
3)、三台主机配置主机名解析(此步骤可以忽略)
cat >> /etc/hosts << EOF
192.168.78.10 master
192.168.78.12 node12
192.168.78.13 node13
EOF
关闭防火墙
systemctl disable firewalld systemctl stop firewalld sed -i 's/enforcing/disabled/' /etc/selinux/config setenforce 0
安装了这些依赖项
yum install socat conntrack ebtables ipset -y
步骤3:主节点上传并解压KubeSphere离线安装包
tar -zxvf kubesphere-all-v3.0.0-offline-linux-amd64.tar.gz
cd kubesphere-all-v3.0.0-offline-linux-amd64
步骤4、创建并修改集群配置文件
创建集群配置文件
./kk create config --with-kubernetes v1.18.6 --with-kubesphere v3.0.0
修改集群配置文件
vi config-sample.yaml
privateRegistry: dockerhub.kubekey.local
其他的配置默认false最小化安装 因为后面需要可以自行开启
需要在配置文件中添加节点信息及私有仓库地址privateRegistry
为了方便起见,我这里使用kubekey创建私有仓库,则该参数privateRegistry设置为:dockerhub.kubekey.local
由于我已经本地编辑好了config-sample.yaml,直接覆盖
#请根据自己实际的环境修改config-sample.yaml
cp -rf /root/config-sample.yaml ./
执行如下命令会对配置文件中所有节点安装依赖,并使用kk创建自签名镜像仓库
./kk init os -f config-sample.yaml -s ./dependencies/ --add-images-repo
这时可以使用docker images命令查看是否创建了私有仓库
docker images
步骤5、镜像导入
push-images.sh将镜像导入之前准备的dockerhub.kubekey.local私有仓库
cd kubesphere-images-v3.0.0/
./push-images.sh dockerhub.kubekey.local
KubeSphere v3.0.0 镜像清单
##k8s-images
kubesphere/kube-apiserver:v1.17.9
kubesphere/kube-scheduler:v1.17.9
kubesphere/kube-proxy:v1.17.9
kubesphere/kube-controller-manager:v1.17.9
kubesphere/kube-apiserver:v1.18.6
kubesphere/kube-scheduler:v1.18.6
kubesphere/kube-proxy:v1.18.6
kubesphere/kube-controller-manager:v1.18.6
kubesphere/kube-apiserver:v1.16.13
kubesphere/kube-scheduler:v1.16.13
kubesphere/kube-proxy:v1.16.13
kubesphere/kube-controller-manager:v1.16.13
kubesphere/kube-apiserver:v1.15.12
kubesphere/kube-scheduler:v1.15.12
kubesphere/kube-proxy:v1.15.12
kubesphere/kube-controller-manager:v1.15.12
kubesphere/pause:3.1
kubesphere/pause:3.2
kubesphere/etcd:v3.3.12
calico/kube-controllers:v3.15.1
calico/node:v3.15.1
calico/cni:v3.15.1
calico/pod2daemon-flexvol:v3.15.1
coredns/coredns:1.6.9
kubesphere/k8s-dns-node-cache:1.15.12
kubesphere/node-disk-manager:0.5.0
kubesphere/node-disk-operator:0.5.0
kubesphere/provisioner-localpv:1.10.0
kubesphere/linux-utils:1.10.0
kubesphere/nfs-client-provisioner:v3.1.0-k8s1.11
##ks-core-images
kubesphere/ks-apiserver:v3.0.0
kubesphere/ks-console:v3.0.0
kubesphere/ks-controller-manager:v3.0.0
kubesphere/ks-installer:v3.0.0
kubesphere/etcd:v3.2.18
kubesphere/kubectl:v1.0.0
kubesphere/ks-upgrade:v3.0.0
kubesphere/ks-devops:flyway-v3.0.0
redis:5.0.5-alpine
alpine:3.10.4
haproxy:2.0.4
mysql:8.0.11
nginx:1.14-alpine
minio/minio:RELEASE.2019-08-07T01-59-21Z
minio/mc:RELEASE.2019-08-07T23-14-43Z
mirrorgooglecontainers/defaultbackend-amd64:1.4
kubesphere/nginx-ingress-controller:0.24.1
osixia/openldap:1.3.0
csiplugin/snapshot-controller:v2.0.1
kubesphere/kubefed:v0.3.0
kubesphere/tower:v0.1.0
kubesphere/prometheus-config-reloader:v0.38.3
kubesphere/prometheus-operator:v0.38.3
prom/alertmanager:v0.21.0
prom/prometheus:v2.20.1
kubesphere/node-exporter:ks-v0.18.1
jimmidyson/configmap-reload:v0.3.0
kubesphere/notification-manager-operator:v0.1.0
kubesphere/notification-manager:v0.1.0
kubesphere/metrics-server:v0.3.7
kubesphere/kube-rbac-proxy:v0.4.1
kubesphere/kube-state-metrics:v1.9.6
##ks-logging-images
kubesphere/elasticsearch-oss:6.7.0-1
kubesphere/elasticsearch-curator:v5.7.6
kubesphere/fluentbit-operator:v0.2.0
kubesphere/fluentbit-operator:migrator
kubesphere/fluent-bit:v1.4.6
elastic/filebeat:6.7.0
kubesphere/kube-auditing-operator:v0.1.0
kubesphere/kube-auditing-webhook:v0.1.0
kubesphere/kube-events-exporter:v0.1.0
kubesphere/kube-events-operator:v0.1.0
kubesphere/kube-events-ruler:v0.1.0
kubesphere/log-sidecar-injector:1.1
docker:19.03
##istio-images
istio/citadel:1.4.8
istio/galley:1.4.8
istio/kubectl:1.4.8
istio/mixer:1.4.8
istio/pilot:1.4.8
istio/proxyv2:1.4.8
istio/sidecar_injector:1.4.8
jaegertracing/jaeger-agent:1.17
jaegertracing/jaeger-collector:1.17
jaegertracing/jaeger-operator:1.17.1
jaegertracing/jaeger-query:1.17
jaegertracing/jaeger-es-index-cleaner:1.17.1
##ks-devops-images
jenkins/jenkins:2.176.2
jenkins/jnlp-slave:3.27-1
kubesphere/jenkins-uc:v3.0.0
kubesphere/s2ioperator:v2.1.1
kubesphere/s2irun:v2.1.1
kubesphere/builder-base:v2.1.0
kubesphere/builder-nodejs:v2.1.0
kubesphere/builder-maven:v2.1.0
kubesphere/builder-go:v2.1.0
kubesphere/s2i-binary:v2.1.0
kubesphere/tomcat85-java11-centos7:v2.1.0
kubesphere/tomcat85-java11-runtime:v2.1.0
kubesphere/tomcat85-java8-centos7:v2.1.0
kubesphere/tomcat85-java8-runtime:v2.1.0
kubesphere/java-11-centos7:v2.1.0
kubesphere/java-8-centos7:v2.1.0
kubesphere/java-8-runtime:v2.1.0
kubesphere/java-11-runtime:v2.1.0
kubesphere/nodejs-8-centos7:v2.1.0
kubesphere/nodejs-6-centos7:v2.1.0
kubesphere/nodejs-4-centos7:v2.1.0
kubesphere/python-36-centos7:v2.1.0
kubesphere/python-35-centos7:v2.1.0
kubesphere/python-34-centos7:v2.1.0
kubesphere/python-27-centos7:v2.1.0
kubesphere/notification:flyway_v2.1.2
kubesphere/notification:v2.1.2
kubesphere/alert-adapter:v3.0.0
kubesphere/alerting-dbinit:v3.0.0
kubesphere/alerting:v2.1.2
##openpitrix-images
openpitrix/generate-kubeconfig:v0.5.0
openpitrix/openpitrix:flyway-v0.5.0
openpitrix/openpitrix:v0.5.0
openpitrix/release-app:v0.5.0
##example-images
kubesphere/examples-bookinfo-productpage-v1:1.13.0
kubesphere/examples-bookinfo-reviews-v1:1.13.0
kubesphere/examples-bookinfo-reviews-v2:1.13.0
kubesphere/examples-bookinfo-reviews-v3:1.13.0
kubesphere/examples-bookinfo-details-v1:1.13.0
kubesphere/examples-bookinfo-ratings-v1:1.13.0
busybox:1.31.1
joosthofman/wget:1.0
kubesphere/netshoot:v1.0
nginxdemos/hello:plain-text
wordpress:4.8-apache
mirrorgooglecontainers/hpa-example:latest
java:openjdk-8-jre-alpine
fluent/fluentd:v1.4.2-2.0
perl:latest
##csi-images
csiplugin/csi-neonsan:v1.2.0
csiplugin/csi-neonsan-ubuntu:v1.2.0
csiplugin/csi-neonsan-centos:v1.2.0
csiplugin/csi-provisioner:v1.5.0
csiplugin/csi-attacher:v2.1.1
csiplugin/csi-resizer:v0.4.0
csiplugin/csi-snapshotter:v2.0.1
csiplugin/csi-node-driver-registrar:v1.2.0
csiplugin/csi-qingcloud:v1.2.0
步骤6、创建并安装集群
cd /root/kubesphere-all-v3.0.0-offline-linux-amd64
./kk create cluster -f config-sample.yaml
可以查看安装日志
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
#查看k8s集群和kubesphere-system状态
查看kube-system POD状态
步骤7、web界面登录及体验kubesphere集群
根据集群安装成功的提示进行登录
Console: http://ip:30880
Account: admin
Password: P@88w0rd
步骤8、Rancher简介
Rancher是为使用容器的公司打造的容器管理平台。Rancher简化了使用K8S的流程,开发者可以随处运行K8S,满足IT需求规范,赋能DevOps团队。
步骤9、Docker安装
#安装docker-ce
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install -y docker-ce
#配置docker使用http连接私有仓库,不使用私有仓库时可不配置
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1nj0zren.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com",
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"https://mirror.ccs.tencentyun.com"],
"insecure-registries":["xxxxx:5000"]
}
EOF
tee /etc/containers <<-'EOF'
[registries.search]
registries = ['xxxxx:5000']
[registries.insecure]
registries = ['xxxxx:5000']
EOF
systemctl daemon-reload
systemctl start docker
systemctl enable docker
systemctl stop docker
#数据放到/data数据盘
mkdir -p /data/lib
mv /var/lib/docker /data/lib/docker
#建立软链接:
ln -s /data/lib/docker /var/lib/docker
systemctl start docker
步骤10、Rancher安装
安装完Docker之后,我们就可以开始安装Rancher了。Rancher已经内置K8S,无需再额外安装。就像我们安装好Minikube一样,K8S直接就内置了。
docker pull rancher/rancher:v2.5-head
docker run -p 80:80 -p 443:443 --name rancher \
--privileged \
--restart=unless-stopped \
-v /data/docker/rancher:/var/lib/rancher/ \
-v /root/var/log/auditlog:/var/log/auditlog \
-e AUDIT_LEVEL=3 \
-d rancher/rancher:v2.5-head
步骤11、Rancher使用
我们首先来简单使用下Rancher。
步骤12、总结
使用Rancher可视化管理K8S还真是简单,大大降低了K8S的部署和管理难度。一个Docker命令即可完成部署,可视化界面可以查看应用运行的各种状态。K8S脚本轻松执行,不会写脚本的图形化界面设置下也能搞定。总结一句:真香!
参考资料
Rancher官方文档:https://docs.rancher.cn/rancher2/
项目源码地址
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-fabric
步骤13、k8s集群管理平台:Kubesphere与Rancher对比
个人感觉:
1. Rancher更侧重于底层k8s集群的维护,相关的k8s周边生态没有Kubesphere整合的好。当然,这样的话可选择性也更多了。
2.Rancher(rke)对底层k8s封装限制得比较死,只能通过Rancher的API调用。
3. Kubesphere相对于刚上手的人来说,比较傻瓜化,而且包括一些CI、CD的东西都做了整合。
4. 两种方案都是很不错的,结合用起来可能更好吧。可以根据需要来进行权衡。
参考文档:
https://kubesphere.com.cn/docs/installing-on-linux/introduction/air-gapped-installation/
https://blog.csdn.net/yaodunlin/article/details/107574185
https://my.oschina.net/u/4113630/blog/4967445
https://www.zhihu.com/question/348609092