24 k8s+kubeSphere 一篇就够

24 k8s+kubeSphere 一篇就够,第1张

grep -E '(vmx|svm)' /proc/cpuinfo

yum install qemu virt kvm -y

Question:

Solution:已安装的跳过

yum install qemu virt kvm -y --skip-broken

systemctl start libvirtd

systemctl enable libvirtd

virsh list

yum install -y bridge-utils

#配置桥接模式

cd /etc/sysconfig/network-scripts

cp ifcfg-em2 ifcfg-br0

[root@localhost network-scripts]# vim ifcfg-em2

TYPE=Ethernet

BRIDGE=br0

NAME=em2

UUID=74c8085f-4c0d-4743-b0a0-70e51e3eb877

DEVICE=em2

ONBOOT=yes

#注意IPADDR 要改为自己的

[root@localhost network-scripts]# vim ifcfg-br0

TYPE=Bridge

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=none

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=br0

DEVICE=br0

ONBOOT=yes

IPADDR=17216103

PREFIX=24

GATEWAY=1721610254

DNS1=114114114114

systemctl restart network

#验证

brctl show

cd /home/kvm

#创建master虚拟机的存储盘 104

qemu-img create -f qcow2 -o cluster_size=2M k8s-master01qcow2 200G

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name k8s-master01qcow2 --memory 8192 --vcpus 4 --disk /home/kvm/k8s-master01qcow2,format=qcow2 --cdrom /home/kvm/CentOS-7-x86_64-DVD-2009iso --network bridge=br0 --graphics vnc,listen=0000 --noautoconsole

#创建worker虚拟机的存储盘 105

qemu-img create -f qcow2 -o cluster_size=2M k8s-worker01qcow2 200G

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name k8s-worker01qcow2 --memory 8192 --vcpus 4 --disk /home/kvm/k8s-worker01qcow2,format=qcow2 --cdrom /home/kvm/CentOS-7-x86_64-DVD-2009iso --network bridge=br0 --graphics vnc,listen=0000 --noautoconsole

#创建worker虚拟机的存储盘 103

qemu-img create -f qcow2 -o cluster_size=2M k8s-worker02qcow2 200G

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name k8s-worker02qcow2 --memory 32768 --vcpus 32 --disk /home/kvm/k8s-worker02qcow2,format=qcow2 --cdrom /home/kvm/CentOS-7-x86_64-DVD-2009iso --network bridge=br0 --graphics vnc,listen=0000 --noautoconsole

netstat -ntlp | grep 5900

virsh list --all

virsh shutdown k8s-master01qcow2

virsh start k8s-master01qcow2

ssh 172161050 root@starQuest2022

Question:系统启动卡住

Solution:

virsh destroy k8s-master01qcow2

virsh undefine k8s-master01qcow2

Question:更改桥接模式失败引发的问题

Solution:

vi /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=static

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=eth0

UUID=c510f2f9-9820-45e8-9c70-65674bd35258

DEVICE=eth0

ONBOOT=yes

IPADDR=172161050

PREFIX=24

GATEWAY=1721610254

DNS1=114114114114

systemctl restart network

Question:

Solution:

vi /root/ssh/known_hosts 删除有问题IP对应行

#设置hostname

hostnamectl set-hostname k8s-master01

hostnamectl set-hostname k8s-worker01

hostnamectl set-hostname k8s-worker02

yum update

yum install wget

yum install vim

rpm --import >wikijs 是优秀的开源 wiki 系统,相较于 xwiki ,功能目前性上比 xwiki 不够完善,但也在不断进步。 wiki 写作、分项、权限管理功能还是有的,胜在 UI 设计很漂亮,能满足小团队的基本知识管理需求。

以下工作是在 kubernetes 1230 + helm 3 已经部署好的情况下进行的。部署 kubernetes 可以参考我另外的文章 “kubesphere 多节点集群安装”

我们使用 openebs 作为存储,openebs 默认安装的 local storageclass 在 pod 销毁后自动删除,不适合用于我的 mysql 存储,我们在 local storageclass 基础上稍作修改,创建新的 storageclass,允许 pod 销毁后,pv 内容继续保留,手动决定怎么处理。

我们团队其他项目中也需要使用 postgresql, 为了提高 postgresql 数据库的利用率和统一管理,我们独立部署 postgresql, 并在安装 wikijs 时,配置外部数据库。

我们使用 secret 保存 postgres 用户密码等敏感信息。

使用 configmap 保存数据库初始化脚本,在 数据库创建时,将 configmap 中的数据库初始化脚本挂载到 /docker-entrypoint-initdbd, 容器初始化时会自动执行该脚本。

我们使用 openesb 来提供存储服务。可以通过 创建 pvc 来提供持久化存储。

在前面的步骤准备好各种配置信息和存储后,就可以开始部署 postgresql 服务了。
我们的 kubernetes 没有配置 存储阵列,使用的是 openesb 作为存储,我们使用 deployment 来部署 postgresql 服务。

测试略

adminer 是 php 语言的 数据库管理工具,可以在浏览器上管理数据库,因为我们的数据库部署在 kubernetes ,配套使用基于浏览器的 数据库管理工具,可以更方便的管理,而且不需要把安装在 kubernetes 集群里的数据库暴露出来,提高了数据保密性。

我们使用 configmap 保存 adminer 需要的环境变量。比如通过 ADMINER_DESIGN 设置皮肤,通过 ADMINER_PLUGINS 设置需要加载的插件。



我们使用 secret 保存 wikijs 用于连接数据库的用户名密码等敏感信息。

我们使用 configmap 保存 wikijs 的数据库连接信息。

如果 postgresql 数据库里没有创建 wikijs 用户和数据 ,需要手工完成一下工作:
通过 adminer 连接 postgresql 数据库,执行一下 sql 语句,完成数据库和用户的创建、授权

在前面的步骤准备好各种配置信息和存储后,就可以开始部署 wikijs 服务了。

以下是完整的通过 deployment 部署 mysql 数据库和 xwiki 的 yaml 文件,保存为 xwikiyaml 。

直接执行可以创建好 wikijs

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是几个优质的DevOps开源工具。

Jpom是一个简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件。当项目出现问题时,可以能够通过Jpom即时排查问题,问题解决后还可以直接上传修改后的Jar,项目的堆栈信息,服务器CPU、内存使用情况一目了然,不必再登录服务器管理。

项目地址:>

基于k8s搭建的一套CI/CD系统,其目的是方便k8s和服务端相关技术的实践,在搭建过程中会涉及docker、dockerhub、k8s、github、jenkins、kubesphere

一台Mac物理机+3台Centos虚拟机

Docker是这个教程的基石,对Docker一点都不了解的同学,建议去B站看一下我发布的 Docker小白快速入门+实战 ,课程比较简洁,主要帮助不了解Docker的同学快速掌握并应用
安装命令如下

k8s是一个容器编排工具,可以轻松实现应用的扩/缩容、集群等,具体安装方式参考文档我的 k8s集群安装

这是k8s的一个web管理界面,用于简化k8s的 *** 作。

在k8s继续的所有节点上都需要安装nfs-utils、rpcbind,搭建步骤参考我的 Centos7搭建NFS服务端

kubesphere明确说明基于k8s安装需要配置DefaultStorageclass,创建步骤参考我的 k8s基于NFS创建Storageclass

安装时间会有一点长,安装步骤参考我的 k8s集群安装Kubersphere

jenkins在这里是作为一个纽带的作用,因为jenkins在构建项目时可以执行shell脚本,因此通过shell脚本轻松的将github、docker注册服务器、k8s集群三者关联起来,从而简化jenkins的使用(就是一个偏运维的工具而已)

这里之所以使用Docker安装Jenkins,是因为我不想在物理机上安装jenkins(毕竟只是一个工具),而虚拟机已经启动了三台,再创建就会影响我的物理机性能,所以这里直接使用物理机的Docker跑Jenkins,用完就删了。
安装步骤参考我的 基于Docker安装Jenkins

免密访问k8s集群的master服务器
参考我的 Linux配置免密登录 ,这里需要进入jenkins容器内部进行 *** 作

配置github的ssh key访问

在jenkins创建一个自由风格的软件->填写仓库地址->编写如下脚本

一个简单的CI/CD系统就搭建完成了,后面可以把更多的重心放在k8s资源文件的编写上,理解yaml中各节点的含义也是一项不小的工作量,搞清楚k8s的各个模块,对服务端的架构设计是有益的。

大家好,我是宋磊,在运营商的一个 科技 子公司任职,主要做大数据业务。我主要负责公司的 IaaS 层和 PaaS 层的建设和运营的工作,涉及到两个层面。因为 Kubernetes 是一个非常全面的技术体系,并不是我们部署了一个集群把业务放上去就能开箱即用,涉及到很多方面,比如服务器、网络、存储,还有一系列的工具链的支持,我们才能真正的去投产,所以我们团队是比较适合做这件事的。
我们目前有三种类型的业务:1接口的服务,容量占比是比较大的一块2APP 的应用3外部的应用系统,主要做智慧政务、智慧生态、智慧城市、智慧 旅游 等业务

这三个类型的业务,整体的 TPS 的峰值大约在 2500,平均在 1500 左右。

我们整体的集群规模:我们所有的集群都是以物理服务器进行部署的,生产集群有 50 个物理节点,测试的集群有 20——30 个节点,整体的 Kubernetes 集群的规模不到 100 个物理节点。
上面这张图是我们 Kubernetes 的实践。

IaaS 层:数据中心物理层的网络是 SDN 加 VXLAN 的架构,后续对于网络插件的选型是有考虑的。

存储这一块我们主要是对接 Ceph,我们有一个比较大的 Ceph 集群,大概有 50 个物理节点,其中对接层不单单跑了 KubeSphere 的这些业务,还跑了一些 OpenStack 的虚拟机。我们在 Ceph 上面做了一些数据的分层,闪存盘(存放集群元数据)和 SATA 盘(存放真正的数据),也做了一些数据的热度分层,然后以 KubeSphere 为中心的容器集群周边做了很多对接的工具链。这其中的一些工具链不是容器化的,而是外链的,比如说 CMDB 配置管理,Prometheus 的监控,Skywalking 主要做微服务的全链路监控,还有一些日志的采集分析,主要还是以 ELK 的工具链为主,也是在 KubeSphere 集群之外的,DevOps 这层是基于 Jenkins 的 pipeline 去做的。

然后流量入口这一块,因为我们所有的业务类型都是互联网性质的,所以我们在互联网区域有一个整体的 Nginx 的集群,主要做业务的路由分发和流量的集中控制。
上文已经提到我们的物理网络已经是 SDN 加 VXLAN 的大二层的租户性质,所以对于 KubeSphere 的网络插件的选型,目前主要就两种——Calico 和 Flannel。

Flannel 本身就是基于 VXLAN的,如果选择它的话,相当于我们两个层面——物理网络和 Kubernetes 网络都是 VXLAN,这就涉及到两次层面的封包和解包的问题,对性能还是有一定的影响的,所以我们最终还是选择了 Calico 这种纯三层的 BGP 的网络,然后做网络的插件。

目前我们主要对接的是 Ceph 的块存储,服务于一些有状态的服务,比如我们会做一些 helm 的镜像,主要是 Zookeeper、Redis、MySQL。但是这些有状态的服务主要是在测试集群,给开发测试人员使用的。生产环境主要是一些无状态的服务,比如分布式框架的 Java微服务应用,还有 Python 和 go。go 主要是用来做区块链,因为现在区块链跟 K8s 结合是非常有必要的业务类型。

但是 RBD 块存储有局限性,我们很多业务需要多个 Pod 或者多个容器共同读写某一块存储,但块存储是实现不了的,后续我们还会有对象存储和网络存储(NFS)的对接。
CI/CD 这块,底层是 Jenkins,没有集成到 KubeSphere 里,因为我们之前有一个 Jenkins 的 Master 和 Slave 的架构的平台,基于 pipeline,镜像直接打到 Kubernetes 集群,做自动化的 CD。

日志采集相对来说会麻烦一点,目前对接的 ELK 的工具链,底层主要是采集三种类型的日志,宿主机日志、Pod 业务日志和 Kubernetes 组件相关的日志。宿主机和 Kubernetes 组件日志都是基于宿主机采集。

Pod 业务日志的采集,主要有两种方式:

ELK 的工具链是比较成熟的工具链了,可以参见上图。
我们是以两种形式来进行灰度发布。
我们对于服务治理这块后续可能会有一些需求,目前没有一种特别好的实践方式。

目前来说我们对于微服务治理都是基于辅助的手段,比如全链路监控,日志的指标,来做微服务的流量控制和垄断。后续我们想往服务网格上 探索 ,把流量的监测和控制放在平台层,开发只需要专注于业务的逻辑,目前还没有比较好的落地方案。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10672182.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存