1. 上节回顾

上一小节《人人都会Kubernetes(一):告别手写K8s yaml,运维效率提升500%》介绍了KRM的一些常用功能,并且使用KRM的DEMO环境,无需安装就可以很方便的生成一些资源的YAML数据并使用。

本节将实现在自己的集群中安装KRM,并且使用KRM去管理分布在各个地方的K8s集群,同时将实现快速部署一个服务到K8s集群中,最后实现对该服务的发布与访问。

2. KRM安装

KRM采用云原生设计,不依赖任何基础组件,比如数据库等。所以在安装时无需考虑数据的存储位置,只需要找一个K8s集群进行安装即可。

如果需要用KRM去管理很多个集群,需要保证安装KRM所在的集群能够与其他集群的APIServer能够通讯才可以。

接下来我们在K8s集群当中去安装KRM,本次安装参考:https://github.com/dotbalo/krm/blob/main/deploy.md。

2.1 创建基础数据

kubectl create ns krm
kubectl create sa krm-backend -n krm
kubectl create rolebinding krm-backend --clusterrole=edit --serviceaccount=krm:krm-backend --namespace=krm
kubectl create clusterrole namespace-creater --verb=create --resource=namespaces
kubectl create clusterrolebinding krm-backend-ns-creater --clusterrole=namespace-creater --serviceaccount=krm:krm-backend --namespace=krm

2.2 部署后端服务

注意:KRM部署后,默认的用户名密码是admin/admin,如果需要更改密码,请更改部署文件的USERNAME/PASSWORD变量为用户名密码的MD5值(32位大写,可以使用MD5值在线生成工具进行生成)

cat<<EOF | kubectl -n krm apply -f -
---
apiVersion: v1
kind: Service
metadata:
labels:
app: krm-backend
name: krm-backend
spec:
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: krm-backend
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: krm-backend
name: krm-backend
spec:
replicas: 1
selector:
matchLabels:
app: krm-backend
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
app: krm-backend
spec:
serviceAccountName: krm-backend
containers:
- env:
- name: TZ
value: Asia/Shanghai
- name: LANG
value: C.UTF-8
- name: GIN_MODE
value: release
- name: LOG_LEVEL
value: info
- name: USERNAME
value: 21232F297A57A5A743894A0E4A801FC3
- name: PASSWORD
value: 21232F297A57A5A743894A0E4A801FC3
- name: "IN_CLUSTER"
value: "true"
image: registry.cn-beijing.aliyuncs.com/dotbalo/krm-backend:latest
lifecycle: {}
livenessProbe:
failureThreshold: 2
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 8080
timeoutSeconds: 2
name: krm-backend
ports:
- containerPort: 8080
name: web
protocol: TCP
readinessProbe:
failureThreshold: 2
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 8080
timeoutSeconds: 2
resources:
limits:
cpu: 1
memory: 1024Mi
requests:
cpu: 200m
memory: 256Mi
restartPolicy: Always
EOF

2.3 部署前端服务

注意:前端服务的Service采用NodePort形式,可以直接使用节点IP+端口号即可访问,如果集群当中有Ingress Controller,可以自行配置Ingress

cat<<EOF | kubectl -n krm apply -f -
---
apiVersion: v1
kind: Service
metadata:
labels:
app: krm-frontend
name: krm-frontend
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app: krm-frontend
sessionAffinity: None
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: krm-frontend
name: krm-frontend
spec:
replicas: 1
selector:
matchLabels:
app: krm-frontend
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
app: krm-frontend
spec:
containers:
- env:
- name: TZ
value: Asia/Shanghai
- name: LANG
value: C.UTF-8
image: registry.cn-beijing.aliyuncs.com/dotbalo/krm-frontend:latest
lifecycle: {}
livenessProbe:
failureThreshold: 2
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 80
timeoutSeconds: 2
name: krm-backend
ports:
- containerPort: 80
name: web
protocol: TCP
readinessProbe:
failureThreshold: 2
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 80
timeoutSeconds: 2
resources:
limits:
cpu: 1
memory: 512Mi
requests:
cpu: 100m
memory: 256Mi
restartPolicy: Always
EOF

2.4 访问服务

部署成功后,可以查看服务的启动状态

# kubectl get po -n krm
NAME READY STATUS RESTARTS AGE
krm-backend-6b49f58f99-t87zn 1/1 Running 0 12m
krm-frontend-57fb848dfb-69lpm 1/1 Running 0 12m

之后查看Service的端口号

# kubectl get svc -n krm
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
krm-backend ClusterIP 10.106.194.79 <none> 8080/TCP 13m
krm-frontend NodePort 10.102.233.217 <none> 80:31609/TCP 13m

Pod启动成功后,可以通过任意一台Kubernetes工作节点的IP:NodePort即可访问KRM,如下图所示

默认用户名密码:admin / admin

用户名密码请在后端的USERNAME/PASSWORD变量中更改,注意更改的值为用户名密码的大写的32位MD5值

3. 集群管理

3.1 添加集群

登录后此时KRM并没有可以管理的集群,需要手动添加被管理的目标



注意添加集群的kubeconfig内容不能是只包含文件路径的kubeconfig,而是kubeconfig文件中已经有所有的证书信息

添加完成后,即可在集群列表页看到相关的集群信息,比如集群的版本、状态等

3.2 管理多个集群

如果想要添加多个集群,按照上述的方式再次添加集群即可,比如再添加一个生产环境的集群

集群添加后,可以点击KRM回到首页,之后就可以看到集群的统计信息



4. 部署服务

KRM部署完成后,就可以对集群的资源进行图形化管理操作。接下来将演示如何使用KRM快速的部署一个服务到K8s集群当中,并且进行发布和访问。

首先需要一个服务的镜像,可以使用自己公司内的镜像,也可以使用测试镜像:registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.22.1-alpine3.17

4.1 创建Deployment

在Kubernetes(k8s)中,Deployment是一种无状态控制器,通常用于无状态服务的部署,也是最常用的控制器之一。

传统手动的部署方式需要自行去编辑YAML文件,在使用KRM时,只需要点击调度资源--Deployment--创建即可,并且可以选择需要部署到哪个集群和哪个Namespace,当然了,你也可以使用KRM去创建一个新的Namespace,只需要点击集群资源--命名空间--创建按钮即可,本示例将服务部署到了default命名空间

接下里在创建页面的基本配置当中输入一个Deployment的名称,其他配置可以无需更改。

需要注意的是,通常情况下部署一个服务都需要被其他服务访问,或者被用户访问,此时需要添加一个Service才可以进行服务的暴漏,KRM提供了一键式自动添加添加的功能,只需要把自动添加Service打开即可

接下来还需要修改的地址就是镜像地址,点击容器配置,输入想要部署的镜像地址即可,其他配置按需更改

注意:如果勾选了自动添加Service,需要在容器配置--端口配置里面添加对应的端口。程序端口需要改成程序本身的真实端口号,本示例采用的是nginx服务,所以端口号是80,名称和协议按需修改和选择即可

接下来可以点击创建,就可以在K8s集群中完成部署该服务了

创建成功后,你可以自行选择下一步操作

4.2 部署状态

创建成功后,如果点击了查看列表,即可查看当前集群、当前Namespace下的资源列表

同时还可以列表页对Deployment进行一些操作,比如暂停更新、扩缩容、重启服务、回滚等,具体功能可以自行体验

另外可以点击Pod列表,查看当然Deployment管理的Pod是否已经成功运行

如果启动失败,可以在此页面进行执行命令和查看日志等操作

4.3 访问服务

如果在部署阶段没有自动添加Service,可以使用KRM进行一键添加

点击KRM的服务发布--Service--创建,然后选择发布的类型是Deployment,之后选择哪个Deployment即可,选择后会自动生成Service的相关配置及端口号配置,同时可以修改Service的类型,本次将Service改成了NodePort类型,之后点击创建即可

创建成功后,可以在Service的列表中找到该Service,并且查看该Service暴漏的端口号,之后通过节点IP和端口即可完成服务的访问

当然,如果部署的服务不需要对外暴漏,可以只需要添加Service即可,之后其他服务,或者集群内访问只需要通过http://SERVICE_NAME:SERVICE_PORT即可完成访问

5. 域名发布

如果你的集群当中已经安装并使用了Ingress Controller,那么就可以使用KRM一键式创建Ingress资源,之后就可以通过域名进行访问

接下来点击服务发布--Ingress--创建,然后选择需要代理的Service即可,如有需要可以选择多个Service

之后输入Ingress的名称及选择IngressClass

接下来配置域名和路由即可

在路由配置页面,输入自己的域名和路径即可,当然也可以添加多个域名、多个路径及配置https等,配置完成后点击创建即可

创建完成后,可以在Ingress列表中查看到该Ingress

接下来,你可以点击拓扑图即可查看到当前Ingress所有的路由树,此路由树可以以图形化的方式看到域名、Service、Pod之间的关系

最后,你就可以通过配置的域名进行服务的访问

人人都会Kubernetes(二):使用KRM实现快速部署服务,并且通过域名发布的更多相关文章

  1. 高可用Kubernetes集群-16. ansible快速部署

    说明 本文档指导采用二进制包的方式快速部署高可用kubernetes集群. 脚本托管:k8s-ansible(持续更新) 参考:高可用kubernetes集群 组件版本 组件 版本 备注 centos ...

  2. [转帖]centos7 使用kubeadm 快速部署 kubernetes 国内源

    centos7 使用kubeadm 快速部署 kubernetes 国内源 https://www.cnblogs.com/qingfeng2010/p/10540832.html 前言 搭建kube ...

  3. 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群

    本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...

  4. 傲视Kubernetes(二):Docker镜像搭建与本地Kubernetes环境搭建

    主要内容: 1.Docker与Kubernetes的关系 2.SpringBoot微服务的Docker镜像创建 3.Kubernetes本地环境搭建 一.Docker与Kubernetes的关系 在说 ...

  5. 教你在Kubernetes中快速部署ES集群

    摘要:ES集群是进行大数据存储和分析,快速检索的利器,本文简述了ES的集群架构,并提供了在Kubernetes中快速部署ES集群的样例:对ES集群的监控运维工具进行了介绍,并提供了部分问题定位经验,最 ...

  6. Kurento实战之二:快速部署和体验

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14

    目录 一.模块概览 二.系统环境 三.安装istio 3.1 使用 Istioctl 安装 3.2 使用 Istio Operator 安装 3.3 生产部署情况如何? 3.4 平台安装指南 四.Ge ...

  8. Kubernetes快速部署

    Kubernetes快速部署 kubernetes简介 kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014 ...

  9. [原]CentOS7安装Rancher2.1并部署kubernetes (二)---部署kubernetes

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  10. Kubernetes探索学习001--Centos7.6使用kubeadm快速部署Kubernetes集群

    Centos7.6使用kubeadm快速部署kubernetes集群 为什么要使用kubeadm来部署kubernetes?因为kubeadm是kubernetes原生的部署工具,简单快捷方便,便于新 ...

随机推荐

  1. skywalking插件工作原理剖析

    1. 官方插件二次开发 前面在介绍skywalking-agent目录时,提到了它有一个插件目录,并支持动态的开发插件.其实skywalking默认已经提供大部分框架的插件了,一般情况下不需要额外开发 ...

  2. Mock框架moco学习笔记

    目录 一.Moco框架基本介绍 1. 什么是Moco 2. Moco原理简介 3. Moco的配置和运行 4. Moco启动以及第一个demo 二.mock 的启动及第一个demo 1. 创建star ...

  3. 文心一言 VS 讯飞星火 VS chatgpt (164)-- 算法导论13.1 4题

    四.用go语言,假设将一棵红黑树的每一个红结点"吸收"到它的黑色父结点中,使得红结点的子结点变成黑色父结点的子结点(忽略关键字的变化).当一个黑结点的所有红色子结点都被吸收后,它可 ...

  4. 如何实现CesiumJS的视效升级?

    CesiumJS作为一款强大的地理可视化引擎,为我们提供了丰富的地球数据可视化和交互展示的能力.然而,随着用户需求的不断增加和技术的不断进步,如何进一步提升CesiumJS的视觉效果成为了一个重要的问 ...

  5. JavaFx之SceneBuilder添加其他依赖库(十六)

    JavaFx之SceneBuilder添加其他依赖库(十六) Could not open 'xxxxx.jar' Open operation has failed. Make sure that ...

  6. ubuntu中vim乱码以及执行shell脚本时出现乱码

    vim打开文件中文出现乱码情况,可以参考如下办法: 在vim /usr/share/vim/vimrc文件末尾中加入 (这个vimrc文件是Vim 的系统级配置文件.文档.插件.语法高亮定义.颜色方案 ...

  7. vue 遍历的汉字显示不同的颜色

    <template> <div> <div class="stars"> <span v-for="(star, index) ...

  8. 基于DMS的数仓智能运维服务,知多少?

    摘要:GaussDB(DWS)使用DMS来承载数据库的智能运维体系,提供了数据库运维过程中的监控,分析,处理三大核心处理过程. 本文分享自华为云社区<GaussDB(DWS) 数据库智能监控运维 ...

  9. 教你如何在Spark Scala/Java应用中调用Python脚本

    摘要:本文将介绍如何在 Spark scala 程序中调用 Python 脚本,Spark java程序调用的过程也大体相同. 本文分享自华为云社区<[Spark]如何在Spark Scala/ ...

  10. 数字化转型鸿沟如何消除?ROMA Connect融合集成,联接企业应用现在与未来

    摘要:ROMA Connect平台正在以"联接和融合"的方式,重塑传统企业上云的路径--"条条大路"通向云端. 本文分享自华为云社区<[大厂内参]第13期 ...