关于kubernetes:揭秘sealer背后实现整个集群一键交付的奥秘-龙蜥技术

简介:解读集群镜像“开箱即用”神器——sealer! 编者按:集群镜像把整个集群看成一台服务器,把 k8s 看成云操作系统,实现整个集群的镜像化打包和交付,为企业级软件提供一种“开箱即用”的利用封装技术。本文整顿自龙蜥大讲堂技术直播第11期,由龙蜥社区集群镜像 SIG 核心成员、sealer我的项目发起人方海涛分享——通过 sealer 实现整个集群 Build&Share&Run。 以下是本期龙蜥大讲堂直播回顾文: 什么是镜像集群顾名思义,和操作系统 .iso 镜像或 Docker 镜像相似,集群镜像是用肯定的技术手段把整个集群的所有文件以肯定格局打成的一个资源包。 比照单机和集群会发现一些的乏味景象: 单机有计算、存储、网络等驱动;集群有 CNI/CSI/CRI 实现像是集群的驱动。单机有 ubuntu centos 操作系统;集群中能够把 Kubernetes 看成云操作系统。单机上能够运行 docker 容器或虚拟机;相当于一个运行的实例,集群上也有运行着 K8s 的实例。单机上有虚拟机镜像,docker 镜像;随着云计算技术的倒退,集群上也会形象出相似的镜像技术。以基于 Kubernetes 的集群镜像为例,外面蕴含了除操作系统以外的所有文件: docker 依赖的二进制与 systemd 配置、dockerd 配置,以及一个公有的容器镜像仓库。Kubernetes 外围组件二进制、容器镜像、kubelet system 配置等。利用须要用到的 yaml 配置或 helm chart,以及利用的容器镜像。其它脚本、配置与二进制工具等利用运行须要的所有依赖。同样,集群镜像运行时必定不是起一个容器或者装在一台机器上,而是这个镜像能够间接装置到多台服务器上或者间接对接到私有云的基础设施上。 sealer 介绍sealer 是阿里巴巴开源的集群镜像的一个实现形式(开源我的项目地址见文末)。 Docker 解决了单个容器的镜像化问题,而 sealer 通过把整个集群打包,实现了分布式软件的 Build Share Run!!! 试想咱们要去交付一个 SaaS 利用,它依赖了 MySQL/ES/Redis 这些数据库和中间件,所有货色都在 Kubernetes 上进行编排,如果没有集群镜像时,要做如下操作: 1)找个工具去装置 K8s 集群 2)helm install mysql es redis... 如果是离线环境可能还须要导入容器镜像 ...

April 19, 2022 · 3 min · jiezi

关于kubernetes:kustomize-实践

缘起在 kustomize 呈现之前,Kubernetes 治理利用的形式次要是通过 Helm 或者下层 Paas 来实现。这些工具通常通过特定畛域配置语言(DSL,如Go template、jsonnet) 来保护并治理利用,并且须要参数化模板形式(如 helm) 来自定义配置,这须要额定学习简单的 DSL 语法及容易出错。 kustomize 是什么kustomize 是 kubernetes 原生的配置管理,以无模板形式来定制利用的配置。kustomize 应用 k8s 原生概念帮忙创立并复用资源配置(YAML),容许用户以一个利用形容文件 (YAML 文件)为根底(Base YAML),而后通过 Overlay 的形式生成最终部署利用所需的形容文件。 kustomize 解决了什么痛点如何治理不同环境或不同团队的利用的 Kubernetes YAML 资源如何以某种形式治理不同环境的渺小差别,使得资源配置能够复用,缩小 copy and change 的工作量如何简化保护利用的流程,不须要额定学习模板语法Kustomize 通过以下几种形式解决了上述问题: kustomize 通过 Base & Overlays 形式形式保护不同环境的利用配置kustomize 应用 patch 形式复用 Base 配置,并在 Overlay 形容与 Base 利用配置的差别局部来实现资源复用kustomize 治理的都是 Kubernetes 原生 YAML 文件,不须要学习额定的 DSL 语法官网示例指标: 应用 kustomize 治理 stage、production 两个环境的 helloword 利用 前提两个不同的环境(演示、生产)一个 deployments 资源和 service 资源环境之间有不同的 replicas 或者 ConfigMap最终文件构造demo├── base│ ├── configMap.yaml│ ├── deployment.yaml│ ├── kustomization.yaml│ └── service.yaml└── overlays ├── production │ ├── deployment.yaml │ └── kustomization.yaml └── staging ├── kustomization.yaml └── map.yaml 新建一个 Base 目录这里应用官网的 helloWorld 的 YAML 资源文件作为示例,在 base 目录下新增几个 k8s YAML 资源文件,文件构造如下: ...

April 17, 2022 · 3 min · jiezi

关于kubernetes:kubernetes安装梅开二度

第一次装置k8s是借鉴的网上教程视频教程装置的,是旧的版本。这次装置,将会把所有的组件装置成目前最新版,并且,只参考官网。ps.k8s官网有中文文档,友好度+1 咱们这里应用kubeadm装置k8s集群,所有节点都须要装置,kubeadm、kubectl、kubelet。我这里参考的官网文档地址是:https://kubernetes.io/zh/docs... 虚拟机筹备ipname192.168.0.105k-master192.168.0.106k-node1192.168.0.112k-node2版本组件版本号kubernetes1.23.5单元 3单元 4根底环境筹备机器命名: hostnamectl set-hostname k-master写入host文件(只master): cat >> /etc/hosts << EOF192.168.0.105 k-master192.168.0.106 k-node1192.168.0.112 k-node2EOF敞开防火墙: systemctl stop firewalldsystemctl disable firewalld禁用selinux: sed -i 's/enforcing/disabled/' /etc/selinux/config禁用swap分区: swapoff -avim /etc/fstab--->正文#/dev/mapper/centos-swap swap swap defaults 0 0free -mvim /etc/sysctl.conf--->增加vm.swappiness=0sysctl -pfree -m查看swap是否为0容许 iptables 查看桥接流量、加载br_netfilter模块: cat <<EOF | sudo tee /etc/modules-load.d/k8s.confbr_netfilterEOFcat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsudo sysctl --systemdocker装置https://developer.aliyun.com/... 装置 kubeadm、kubelet 和 kubectl未完待续....... 各种组件简介kubectl:运行在所有node节点上,负责接管apiserver的指令。

April 16, 2022 · 1 min · jiezi

关于kubernetes:k8s-多集群多终端管理工具

因为手头有好几个集群,要去不同的集群pod里执行命令,kubernetes dashboard 不好用,所以自研了一个可能兼容多集群多终端的工具,能够让你在同一个页面拜访不同集群,不同 namespace 的 pod github欢送 star装置kubectl apply -f https://raw.githubusercontent.com/duc-cnzj/execit/master/deploy.yamlkubectl port-forward -n execit svc/execit 31996:80关上 open http://localhost:31996 长处能够看日志能够执行多终端能够跨集群能够跨namespace

April 15, 2022 · 1 min · jiezi

关于kubernetes:Kubernetes搭建wikijs

背景:跟其余公司单干,他们的wiki用的Requarks/wiki,看了一眼文档搭建还是很简略的:https://docs.requarks.io/install/docker。顺便国内搜了一下文档:https://blog.csdn.net/weixin_26750481/article/details/108131866。先不说翻译的咋样,yaml文件能不能保障一下格局?写的也太乱了!看了一下原文:https://medium.com/swlh/deploy-wiki-js-on-kubernetes-686cec78b29还是看原文吧!简略作一个wiki跑一下! Kubernetes搭建wikijs1.创立命名空间namespace这算是一个集体习惯,将不同用处的利用放在不同的namespace也方便管理前期保护!创立一个namespace wiki [root@iZ2zeasfsez3jz7eu7iuh2Z ~]# kubectl create ns wikinamespace/wiki created留神:这是个阿里云的ack集群......以后就一台服务器。因为这些我的项目跟人单干要跑在阿里云下面......创立了一个wiki的目录用于寄存yaml文件! 2.创立配置文件configmap当然了,这里也能够不写configmap间接在利用的deployments配置文件外面增加零碎变量。这里看集体了!对于数据库wikijs反对很多种: DB_TYPE : 数据库类型 ( mysql, postgres, mariadb, mssqlor sqlite)参照官网文档:https://docs.requarks.io/install/docker。这里db_type我就应用了mysql了(开发要求,集体没有什么要求的其实)。数据库间接应用了阿里云的rds数据库最低配置一外围1G内存。当然了提前创立好wikijs库,并对内网服务器进行受权 [root@iZ2zeasfsez3jz7eu7iuh2Z wiki]# cat wiki-config.yaml apiVersion: v1kind: ConfigMapmetadata: name: wiki-config namespace: wikidata: DB_HOST: "xxxxx" DB_PORT: "3306" DB_USER: "root" DB_PASS: "xxxxxxx" DB_TYPE: "mysql" DB_NAME: "wikijs"kubectl apply利用生成cm配置文件(cm=configmap简称) [root@iZ2zeasfsez3jz7eu7iuh2Z wiki]# kubectl apply -f wiki-config.yaml configmap/wiki-config configured3. 编写生成deployment配置文件https://medium.com/swlh/deploy-wiki-js-on-kubernetes-686cec78b29这篇文章比拟古老首先apiVersion就要批改的,另外configmap都间接挂载了还一个个的ValueFrom干什么呢?间接简化一些!并做一下资源的限度![root@iZ2zeasfsez3jz7eu7iuh2Z wiki]# cat wiki.yaml apiVersion: apps/v1kind: Deploymentmetadata: name: laya-wiki namespace: wikispec: replicas: 1 strategy: rollingUpdate: maxSurge: 0 maxUnavailable: 1 selector: matchLabels: app: laya-wiki template: metadata: labels: app: laya-wiki spec: containers: - name: laya-wiki image: requarks/wiki:2.5 envFrom: - configMapRef: name: wiki-config ports: - containerPort: 3000 protocol: TCP resources: requests: memory: "256M" cpu: "250m" limits: memory: "2048M" cpu: "2000m" apply yaml文件期待pod running! ...

April 15, 2022 · 1 min · jiezi

关于kubernetes:大咖实战|Kubernetes自动伸缩实现指南分享

随着云计算技术的一直倒退,基于虚拟机的传统云计算显示出了资源利用率低、调度散发迟缓等弊病。为了解决上述问题,作为容器技术代表性产品的Docker失去了迅速地遍及。而为了应答利用负载的动态变化,Kubernetes作为Docker生态圈里的重要成员更是实现了主动伸缩性能。 Kubernetes主动伸缩指的是Kubernetes能够依据业务流量主动减少或缩小服务。在Kubernetes理论业务场景应用过程中,Kubernetes往往会利用主动伸缩来满足业务零碎的一些扩大的要求。因而,Kubernetes主动伸缩这一性能在理论利用中显得尤为重要。 本期AIOps Developer Meetup邀请了大型跨国互联网公司架构师-马若飞,给大家分享— 《大咖实战|Kubernetes主动伸缩实现指南分享》 主题内容! 直播预报直播主题: 大咖实战|Kubernetes主动伸缩实现指南分享 直播工夫: 4月21日(周四)19:00-20:00 讲师姓名: 马若飞 讲师简介: 大型跨国互联网公司架构师云原生社区 & ServiceMesher 社区管委会成员极客工夫专栏 & 《Istio实战指南》作者直播亮点: 概念解析:什么是利用的主动伸缩(Auto-scaling)能力原理解读:Kubernetes里的主动伸缩实现:HPA工作原理问题分析:“鸡肋”的基于默认系统资源指标的主动伸缩利用晋升:基于自定义指标扩大-让HPA不再鸡肋高效实际:自定义指标配置及演示听众收益: 与云原生技术大咖一起探讨主动伸缩(Auto-scaling)的挑战与利用手把手带你学习基于自定义指标的Kubernetes主动伸缩能力联合场景,线上操作演示自定义指标配置报名形式扫描下方二维码,增加小助手微信,备注「0421」获取直播链接 对于 MeetupAIOps Developer Meetup是由云智慧AIOps社区推出的,面向宽广开发者的系列线上直播及线下分享流动,咱们将汇聚AIOps社区专家团的力量给你提供优质的技术内容,无论是技术解读、开源治理、行业解决方案,置信宽广developers总能在这里找到你想要的内容。 AIOps社区由云智慧发动,针对运维业务场景,提供算法、算力、数据集整体的服务体系及智能运维业务场景的解决方案交换社区。该社区致力于流传AIOps技术,旨在与各行业客户、用户、研究者和开发者们独特解决智能运维行业技术难题、推动AIOps技术在企业中落地、建设衰弱共赢的AIOps开发者生态。 往期回顾上期Meetup由云智慧团体副总裁—李诚分享了 《年营业额百亿的企业都在如何做数字化转型》 主题内容。 次要内容回顾: 深度分析年营业额百亿的大型企业都在如何数字化转型智能运维分级成熟度模型解析扫描上方二维码,获取直播回放与PPT下载链接

April 15, 2022 · 1 min · jiezi

关于kubernetes:适合-Kubernetes-初学者的一些实战练习-六

本系列的前五篇文章: 本实战练习系列的前五文章: 适宜 Kubernetes 初学者的一些实战练习 (一)适宜 Kubernetes 初学者的一些实战练习 (二)适宜 Kubernetes 初学者的一些实战练习 (三)适宜 Kubernetes 初学者的一些实战练习 (四)适宜 Kubernetes 初学者的一些实战练习 (五)本文持续咱们的 Kubernetes 实战练习之旅。 练习1:Kubernetes 里 secret 的应用办法介绍Kubernetes Secret 解决了明码、token、密钥等敏感数据的配置问题,应用 Secret 能够防止把这些敏感数据以明文的模式裸露到镜像或者 Pod Spec 中。 Secret能够以 Volume 或者环境变量的形式应用。 应用如下命令行创立一个 secret: kubectl create secret generic admin-access --from-file=./username.txt --from-file=./password.txt输出文件 username.txt 和 password.txt 须要手动创立,外面别离保护用于测试的用户名和明码。 创立胜利后,发现 secret 的类型为 Opaque: 实际上,Kubernetes 的 secret 有三种类型: Service Account:用来拜访 Kubernetes API,由 Kubernetes 主动创立,并且会主动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中;Opaque:base64 编码格局的 Secret,用来存储明码、密钥等;kubernetes.io/dockerconfigjson :用来存储公有 docker registry 的认证信息。而咱们刚刚创立的 secret 的类型为 Opaque,因而在 kubectl get secrets 的返回后果里,能看到 password 和 username 的值均为 base64 编码: ...

April 14, 2022 · 3 min · jiezi

关于kubernetes:适合-Kubernetes-初学者的一些实战练习-五

本实战练习系列的前四篇文章: 适宜 Kubernetes 初学者的一些实战练习 (一)适宜 Kubernetes 初学者的一些实战练习 (二)适宜 Kubernetes 初学者的一些实战练习 (三)适宜 Kubernetes 初学者的一些实战练习 (四)本文持续咱们的 Kubernetes 实战练习之旅。 练习1 - 将 configmap 通过环境变量注入到 pod 里在 Kubernetes 官网里,已经提到 Kubernetes 里的一个最佳实际(Best Practice)就是把利用代码同配置信息离开,一种形式就是应用 Kubernetes 1.2 里引入的 configmap 概念。 configmap 实际上就是一系列键值对,存储于 etcd 里。etcd 的官网有这样一句话: etcd is a distributed key-value store designed to reliably and quickly preserve and provide access to critical data.etcd 是一个高性能的分布式键值对存储库,用于存储和拜访要害数据。 应用上面的命令行创立一个 Kubernetes config map: kubectl create configmap test-config --from-literal=test.type=unit --from-literal=test.exec=always 创立一个名为 test-config的键值对,key 为 test.type,值为 unit,key 为test.exec, 值为 always. ...

April 14, 2022 · 2 min · jiezi

关于kubernetes:K8S安装Mysql80

K8S装置Mysql8.01.创立ConfigMap存储配置文件mysql-config.yaml apiVersion: v1kind: ConfigMapmetadata: name: mysql-config labels: app: mysqldata: my.cnf: |- [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] max_connections = 2000 secure_file_priv=/var/lib/mysql sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION 执行后果 kubectl apply -f mysql-config.yaml configmap/mysql-config createdkubectl get cmNAME DATA AGEmysql-config 1 7s2. 数据存储(PV+PVC)新建目录 mkdir -p /data/mysqlNFS挂载 vim /etc/exports/data/mysql *(rw,no_root_squash)mysql-pv.yaml apiVersion: v1kind: PersistentVolumemetadata: name: mysql-pvspec: capacity: storage: 5Gi accessModes: - ReadWriteOnce nfs: path: /data/mysql server: 10.0.4.5---apiVersion: v1kind: PersistentVolumeClaimmetadata: name: mysql-pvcspec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi执行后果 kubectl apply -f mysql-pv.yamlkubectl get pv,pvcNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEpersistentvolume/mysql-pv 5Gi RWO Retain Bound default/mysql-pvc 3sNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEpersistentvolumeclaim/mysql-pvc Bound mysql-pv 5Gi RWO 3s3. 部署Mysql Podmysql-deploy.yaml ...

April 14, 2022 · 2 min · jiezi

关于kubernetes:极客程序员怒斥FAANG-科技巨头内部晋升机制正在扼杀-Kubernetes

4 月 7 日,极客程序员 Noah Kantrowitz 在社交媒体上连发多条推文鞭挞“FAANG”科技股巨头外部降职机制对 Kubernetes 全职员工不敌对 ——“这种阻止开发者全职参加开源奉献的激励措施正在扼杀 Kubernetes ”。 该推文一经公布,便引来圈内开发者热议。 所谓的 FAANG,最后指 Facebook、苹果 AAPL、亚马逊、Netflix 以及谷歌母公司 Alphabet 这五大美国科技股巨头(当初有点宽泛),他们对整个科技市场个体的影响力重大。 Noah 在该条推文下方又连发多条推文,对该问题进行了具体论述 —— 因为这些科技股巨头外部的机制决定了“谁能取得降职、谁不能取得降职”。 正因为如此,开发者须要破费相当多的工夫和精力来实现降职推荐信及继续游说来宣传本人,只管推广过程在每个中央都不完全相同,但大多数 FAANG-o-sphere 都采纳了相似的模式: 写一份介绍信,阐明为什么你应该失去晋升,附上你的“推广宣传物料包”让你的经理将以上资料提交给委员会期待或者迎来新机遇所以,这样一来 Kubernetes 技术社区的保护人员库将面临“疾速缩减”的问题,因为大多数开发者技术人员开始致力于“如何实现高薪降职”....低于整个技术圈来说,这可不是个可继续倒退的场面。 Noah 在推文中强调,除了上述问题之外,“咱们无法控制的微小内部激励压力”,这才是迄今为止最大的问题,“诚实说,我看不出有什么解决办法”。 “If you are on a FAANG promo committee, think long and hard about how you've valued this kind of work, please. I don't know what to say to the rest of us though. I normally bang the drum of UBI and grant programs but neither is close to enough to sustain something at this scale.” ...

April 13, 2022 · 1 min · jiezi

关于kubernetes:Kubernetes关于CSR的引子

引子:明天一个小伙伴问我kuberntes集群中kubectl get csr怎么没有输入呢? 我试了一下我集群内的确没有csr的。what is csr?为什么kubectl get csr肯定要有输入呢?什么时候会有csr呢(这里说的是零碎默认的,不包含本人创立的!) 1. Kubernetes 对于CSR1.什么是CSR? csr 的全称是 CertificateSigningRequest 翻译过去就是证书签名申请。具体的定义清参照kubernetes官网文档:https://kubernetes.io/zh/docs/reference/access-authn-authz/certificate-signing-requests/ 2.kubernetes集群肯定要有CSR吗?什么时候有CSR呢?注:这里所说的csr都是默认的并不包含手动创立的参照官网文档:https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-join/看文档得出的论断是: kubernetes 集群在join的过程中是会产生csr的! 首先明确一下kubernetes集群的join(即work节点退出kubernetes集群)对于join咱们罕用的办法有一下两种: 1.应用共享令牌和 API 服务器的 IP 地址,格局如下:kubeadm join --discovery-token abcdef.1234567890abcdef 1.2.3.4:64432. 然而要强调一点退出集群并不是只有这一种形式:你能够提供一个文件 - 规范 kubeconfig 文件的一个子集。 该文件能够是本地文件,也能够通过 HTTPS URL 下载: kubeadm join--discovery-file path/to/file.conf 或者kubeadm join --discovery-file https://url/file.conf个别用户退出集群都是用的第一种形式。第二种形式我明天看文档才看到....就记录一下 3.总结一下在kubernetes join的过程中会产生csr。上面体验一下 2. 实在环境演示csr的产生两台rocky8.5为例。只做简略演示,不用于生产环境(零碎都没有优化,只是简略跑一下join)很多货色都只是为了跑一下测试! 主机名ipmaster or workk8s-master-0110.0.4.2master节点k8s-work-0110.0.4.36work节点 1. rocky应用kubeadm搭建简略kubernetes集群1. 一些零碎的简略设置降级内核其余优化我就不去做了只是想演示一下csr!只做一下update [root@k8s-master-01 ~]# yum update -yand[root@k8s-work-01 ~]# yum update -y减少yum源,敞开防火墙selinux,设置br_netfilter等 ###增加Kubernetes阿里云源[root@k8s-master-01 ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF#敞开防火墙[root@k8s-master-01 ~]# systemctl stop firewalld[root@k8s-master-01 ~]# systemctl disable firewalld # 敞开selinux[root@k8s-master-01 ~]# sed -ie 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config[root@k8s-master-01 ~]# setenforce 0# 容许 iptables 查看桥接流量[root@k8s-master-01 ~]# cat <<EOF | sudo tee /etc/modules-load.d/k8s.confbr_netfilterEOF[root@k8s-master-01 ~]# cat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF[root@k8s-master-01 ~]# sudo sysctl --system配图就拿k8s-work-01节点的操作了。两台服务器都要做这些零碎的设置 ...

April 12, 2022 · 4 min · jiezi

关于kubernetes:K8S-生态周报-Kubernetes-CronJob-可直接配置时区了

「K8S 生态周报」内容次要蕴含我所接触到的 K8S 生态相干的每周值得举荐的一些信息。欢送订阅知乎专栏「k8s生态」。Prometheus blackbox_exporter v0.20.0 正式公布Prometheus 中的 blackbox_exporter 咱们个别应用它进行黑盒监控,比方对一些 HTTP/HTTPS,DNS,TCP 等接口或者申请。 在这个版本中又减少了很多乏味的个性,咱们一起来看看。 #835 减少了对 gRPC 接口的健康检查,当初 gRPC 用的也越来越多了。要晓得在两年前发动相似性能探讨的时候,过后的维护者还认为 gRPC 反对曾经超过了我的项目的职责范畴,不过目前能够看到 blackbox_exporter 曾经根本涵盖到了咱们所须要的各类协定。如果你应用了这个性能的话,它会产生一些 metrics 可供咱们进行监控告警。 probe_grpc_healthcheck_response{serving_status="UNKNOWN"}=0probe_grpc_healthcheck_response{serving_status="SERVING"}=1probe_grpc_healthcheck_response{serving_status="NOT_SERVING"}=0probe_grpc_healthcheck_response{serving_status="SERVICE_UNKNOWN"}=0#823 为 HTTP 类型的工作减少了 Hostname 参数,这能够在发动申请的时候传递过来 Host 申请头,在配置工作的时候能够应用如下的配置作为参考:scrape_configs: - job_name: blackbox_all metrics_path: /probe params: module: [ http_2xx ] # Look for a HTTP 200 response. dns_sd_configs: - names: - example.com - prometheus.io type: A port: 443 relabel_configs: - source_labels: [__address__] target_label: __param_target replacement: https://$1/ # Make probe URL be like https://1.2.3.4:443/ - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 127.0.0.1:9115 # The blackbox exporter's real hostname:port. - source_labels: [__meta_dns_name] target_label: __param_hostname # Make domain name become 'Host' header for probe requests - source_labels: [__meta_dns_name] target_label: vhost # and store it in 'vhost' label更多详细信息请参考其 ReleaseNote ...

April 11, 2022 · 1 min · jiezi

关于kubernetes:Terraform与Kubernetes的体验

背景:Terraform体验了腾讯云的CVM的基本操作。失常流程要去体验一下其余根底组件的整合比方数据库redis等根底组件,还有现有资源的导入。配置文件的合理配置等等等....先插播一下kubernetes的体验吧......毕竟我次要的工作环境是Kubernetes!也有tke。其实也能够体验下tke的整合?当初先独自体验下原生的kubernetes吧! Terraform与Kubernetes的体验1.对于Documentation的疾速导读扫了一眼官网文档https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs。第一眼上来我就找到了我的关注点: Guides(指南,应该包含如何连贯kubernetes集群),几个罕用的api: apps/v1,core/v1,networking/v1,rbac/v1! 2.terraform 连贯kubernetes集群以及简略操作1. terraform 连贯kubernetes集群初始化相干1. 指定required_providers看一眼Guides:https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/guides/v2-upgrade-guide#using-required_providers-to-test-the-update首先是插件版本的指定(截至以后:最新文档是2.9.0,然而没有加版本号下载的版本是2.10.0) 2. terraform连贯kubernetes集群的两种形式参照官网文档:https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/guides/getting-started#provider-setup,看一眼连贯terraform kubernetes的两种形式: kubeconfig pathhost and tls证书看集体爱好了。我是抉择了第一种连贯形式! 3. 创立工作目录初始化terraform并顺便创立一个namespace1. 创立工作目录[root@k8s-master-01 ~]# mkdir terraform-k8s[root@k8s-master-01 ~]# cd terraform-k8s/2. 创立provider.tf[root@k8s-master-01 terraform-k8s]# cat provider.tf terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">= 2.10.0" }} }provider "kubernetes" { config_path = "~/.kube/config" config_context = "kubernetes-admin@kubernetes"}resource "kubernetes_namespace" "zhangpeng" { metadata { name = "zhangpeng" }}3. terraform initroot@k8s-master-01 terraform-k8s]# terraform init留神: 官网文档貌似当初最新是2.9.0,然而开始我没有加版本好显示有2.10.0就间接写2.10.0了 4. terraform plan and terraform apply[root@k8s-master-01 terraform-k8s]# terraform plan ...

April 8, 2022 · 2 min · jiezi

关于kubernetes:利用sealos快速构建基于mongo-minio-on-openebs的函数计算平台摸鱼必备

笔者在开发laf(https://github.com/lafjs/laf)的过程中依赖了mongo minio这些组件,本文就如何对这些组件最佳实际来做个介绍。 顺带提一嗓子laf这个写代码像写博客一样简略的函数计算平台,写完代码,点击公布,关机走人,什么docker 什么k8s 什么CI/CD 我一个写业务的关怀这些干嘛~ Laf是一个被业务逼出来的框架,让前端秒变全栈。 Life is short, you need laf :) Laf依赖mongo minio ingress,而为了整个货色能够更完满的云原生化,咱们引入openebs来治理存储。 | 最佳拍档 sealos从来不让用户苦楚,laf的需要,sealos只须要: sealos run \ -e openebs-basedir=/data -e mongo-replicaCount=3 \ fanux/kubernetes:v1.23.5 \ fanux/openebs:latest \ fanux/mongo:latest \ laf-js/laf:latest \ -m 192.168.0.2 -n 192.168.0.3而后就没有而后了,这样的货色你能不喜爱?只须要两个环境变量指定存储目录和mongo正本数即可,咱们很分明用户想要的简略是什么样的,当然最牛的中央是让用户简略且不会就义性能,这就是大道至简,是sealos最引以为傲的中央。 | 工作量不丰满教程上面来看看你不必sealos须要经验怎么苦楚的人生,当然以下教程很适宜你在工作量不丰满的时候实际,当然我更举荐你用sealos自动化实现了,而后用上面的文档通知老板你做了很多事,老板很开心,说这小伙真能干,而你舒舒服服撸了一天农药。。。 | 装置openebskubectl apply -f https://openebs.github.io/charts/openebs-operator.yamlopenebs有很多种存储模式,块存储cStore和local PV,本地目录存储, 长期存储等,生产环境举荐应用块,要求没那么严格能够用本地目录存储,长期存储只用于测试。 创立storage classapiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: local-hostpath annotations: openebs.io/cas-type: local cas.openebs.io/config: | - name: StorageType value: hostpath - name: BasePath value: /var/local-hostpath # Host path storage dirprovisioner: openebs.io/localreclaimPolicy: DeletevolumeBindingMode: WaitForFirstConsumer这里的BasePath就配置你想把数据存储到哪个目录了 ...

April 8, 2022 · 5 min · jiezi

关于kubernetes:kubernetes安装过程中的网络问题

kubernetes装置过程中的网络问题k8s具体装置过程,能够参考另一篇。以下是装置部署实现后的问题。 k8s装置实现后,应用以下命令查看集群状态kubectl get nodes各节点均为notready状态. 应用以下命令查看零碎pod状态:kubectl get pod -n kube-system -o wide 发现只有coredns这个服务不是失常的running状态。 废话不多说,间接上解决方案。(据我当初的了解,这是k8s集群各节点网络通信的问题。应用k8s定义好的cni网络规范插件,即可解决。) 1.本人创立一个flannl的pod定义文件vim kube-flannel.yml2.将上面的yml文件内容贴进去。3.而后创立pod。kubectl apply -f kube-flannel.yml ---apiVersion: policy/v1beta1kind: PodSecurityPolicymetadata: name: psp.flannel.unprivileged annotations: seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/defaultspec: privileged: false volumes: - configMap - secret - emptyDir - hostPath allowedHostPaths: - pathPrefix: "/etc/cni/net.d" - pathPrefix: "/etc/kube-flannel" - pathPrefix: "/run/flannel" readOnlyRootFilesystem: false # Users and groups runAsUser: rule: RunAsAny supplementalGroups: rule: RunAsAny fsGroup: rule: RunAsAny # Privilege Escalation allowPrivilegeEscalation: false defaultAllowPrivilegeEscalation: false # Capabilities allowedCapabilities: ['NET_ADMIN', 'NET_RAW'] defaultAddCapabilities: [] requiredDropCapabilities: [] # Host namespaces hostPID: false hostIPC: false hostNetwork: true hostPorts: - min: 0 max: 65535 # SELinux seLinux: # SELinux is unused in CaaSP rule: 'RunAsAny'---kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata: name: flannelrules:- apiGroups: ['extensions'] resources: ['podsecuritypolicies'] verbs: ['use'] resourceNames: ['psp.flannel.unprivileged']- apiGroups: - "" resources: - pods verbs: - get- apiGroups: - "" resources: - nodes verbs: - list - watch- apiGroups: - "" resources: - nodes/status verbs: - patch---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata: name: flannelroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: flannelsubjects:- kind: ServiceAccount name: flannel namespace: kube-system---apiVersion: v1kind: ServiceAccountmetadata: name: flannel namespace: kube-system---kind: ConfigMapapiVersion: v1metadata: name: kube-flannel-cfg namespace: kube-system labels: tier: node app: flanneldata: cni-conf.json: | { "name": "cbr0", "cniVersion": "0.3.1", "plugins": [ { "type": "flannel", "delegate": { "hairpinMode": true, "isDefaultGateway": true } }, { "type": "portmap", "capabilities": { "portMappings": true } } ] } net-conf.json: | { "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" } }---apiVersion: apps/v1kind: DaemonSetmetadata: name: kube-flannel-ds namespace: kube-system labels: tier: node app: flannelspec: selector: matchLabels: app: flannel template: metadata: labels: tier: node app: flannel spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/os operator: In values: - linux hostNetwork: true priorityClassName: system-node-critical tolerations: - operator: Exists effect: NoSchedule serviceAccountName: flannel initContainers: - name: install-cni-plugin #image: flannelcni/flannel-cni-plugin:v1.0.1 for ppc64le and mips64le (dockerhub limitations may apply) image: rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.1 command: - cp args: - -f - /flannel - /opt/cni/bin/flannel volumeMounts: - name: cni-plugin mountPath: /opt/cni/bin - name: install-cni #image: flannelcni/flannel:v0.17.0 for ppc64le and mips64le (dockerhub limitations may apply) image: rancher/mirrored-flannelcni-flannel:v0.17.0 command: - cp args: - -f - /etc/kube-flannel/cni-conf.json - /etc/cni/net.d/10-flannel.conflist volumeMounts: - name: cni mountPath: /etc/cni/net.d - name: flannel-cfg mountPath: /etc/kube-flannel/ containers: - name: kube-flannel #image: flannelcni/flannel:v0.17.0 for ppc64le and mips64le (dockerhub limitations may apply) image: rancher/mirrored-flannelcni-flannel:v0.17.0 command: - /opt/bin/flanneld args: - --ip-masq - --kube-subnet-mgr resources: requests: cpu: "100m" memory: "50Mi" limits: cpu: "100m" memory: "50Mi" securityContext: privileged: false capabilities: add: ["NET_ADMIN", "NET_RAW"] env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace volumeMounts: - name: run mountPath: /run/flannel - name: flannel-cfg mountPath: /etc/kube-flannel/ - name: xtables-lock mountPath: /run/xtables.lock volumes: - name: run hostPath: path: /run/flannel - name: cni-plugin hostPath: path: /opt/cni/bin - name: cni hostPath: path: /etc/cni/net.d - name: flannel-cfg configMap: name: kube-flannel-cfg - name: xtables-lock hostPath: path: /run/xtables.lock type: FileOrCreate至于这个问题根本原因是什么,临时不去深究。萌新入坑,先跑起来再说。 ...

April 7, 2022 · 3 min · jiezi

关于kubernetes:从k8s集群e2e调度慢告警看kubescheduler源码

k8s教程阐明k8s底层原理和源码解说之精髓篇k8s底层原理和源码解说之进阶篇prometheus全组件的教程01_prometheus全组件配置应用、底层原理解析、高可用实战02_prometheus-thanos应用和源码解读03_kube-prometheus和prometheus-operator实战和原理介绍04_prometheus源码解说和二次开发go语言课程golang根底课程golang运维平台实战,服务树,日志监控,工作执行,分布式探测告警的qlhistogram_quantile(0.99, sum(rate(scheduler_e2e_scheduling_duration_seconds_bucket{job="kube-scheduler"}[5m])) without(instance, pod)) > 3 for 1m含意:调度耗时超过3秒 追踪这个 histogram的metrics代码版本 v1.20地位 D:\go_path\src\github.com\kubernetes\kubernetes\pkg\scheduler\metrics\metrics.go追踪调用方,在observeScheduleAttemptAndLatency的封装中,地位 D:\go_path\src\github.com\kubernetes\kubernetes\pkg\scheduler\metrics\profile_metrics.go这里可看到 调度的三种后果都会记录相干的耗时 追踪调用方地位 D:\go_path\src\github.com\kubernetes\kubernetes\pkg\scheduler\scheduler.go + 608在函数 Scheduler.scheduleOne中,用来记录调度每个pod的耗时能够看到具体的调用点,在异步bind函数的底部由此得出结论 e2e 是统计整个scheduleOne的耗时 go func() { err := sched.bind(bindingCycleCtx, fwk, assumedPod, scheduleResult.SuggestedHost, state) if err != nil { metrics.PodScheduleError(fwk.ProfileName(), metrics.SinceInSeconds(start)) // trigger un-reserve plugins to clean up state associated with the reserved Pod fwk.RunReservePluginsUnreserve(bindingCycleCtx, state, assumedPod, scheduleResult.SuggestedHost) if err := sched.SchedulerCache.ForgetPod(assumedPod); err != nil { klog.Errorf("scheduler cache ForgetPod failed: %v", err) } sched.recordSchedulingFailure(fwk, assumedPodInfo, fmt.Errorf("binding rejected: %w", err), SchedulerError, "") } else { // Calculating nodeResourceString can be heavy. Avoid it if klog verbosity is below 2. if klog.V(2).Enabled() { klog.InfoS("Successfully bound pod to node", "pod", klog.KObj(pod), "node", scheduleResult.SuggestedHost, "evaluatedNodes", scheduleResult.EvaluatedNodes, "feasibleNodes", scheduleResult.FeasibleNodes) } metrics.PodScheduled(fwk.ProfileName(), metrics.SinceInSeconds(start)) metrics.PodSchedulingAttempts.Observe(float64(podInfo.Attempts)) metrics.PodSchedulingDuration.WithLabelValues(getAttemptsLabel(podInfo)).Observe(metrics.SinceInSeconds(podInfo.InitialAttemptTimestamp)) // Run "postbind" plugins. fwk.RunPostBindPlugins(bindingCycleCtx, state, assumedPod, scheduleResult.SuggestedHost) }}scheduleOne从上到下都蕴含哪几个过程01 调度算法耗时实例代码 ...

April 7, 2022 · 3 min · jiezi

关于kubernetes:Kubernetes-prometheus-Job误报解决

背景:根本就是这样的环境:TKE 1.20.6搭建Kube-Prometheus(prometheus-oprator,做了一个cronjob:Kubernetes Cronjob的第一次应用。更新版本时候job产生了异样。然而起初都复原了。可是alertmanager始终报警:相当惹人烦。该怎么解决呢? Kubernetes prometheus Job误报解决1. 暴力形式-删除失败的job![root@k8s-master-01 manifests]# kubectl get job -n develop-layaverseNAME COMPLETIONS DURATION AGExxxx-worldmap-job-27468560 0/1 13d 13dxxxx-worldmap-job-27487460 1/1 1s 11mxxxx-worldmap-job-27487465 1/1 1s 6m57sxxxx-worldmap-job-27487470 1/1 1s 117s[root@k8s-master-01 manifests]# kubectl get cronjob -n develop-layaverseNAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGExxxx-worldmap-job */5 * * * * False 0 2m15s 79d默认应该是显示三个job的。这个失败的还始终在.....依照失常的了解删除调失败的job就能够了吧?当然了,还想打破砂锅问到底的其解决一下的。这个简略形式先列在这里,最初去尝试! 2.批改elert规定1. prometheus web 确认报警的elerts登陆prometheus控制台首先确认报警的两个alerts是KubeJobCompletion and KubeJobFailed.失常了解下应该是从这两个elerts动手吧?elerts配置文件在kubernetes-prometheusRule.yaml中: [root@k8s-master-01 manifests]# grep -r KubeJobFailed ././kubernetes-prometheusRule.yaml: - alert: KubeJobFailed[root@k8s-master-01 manifests]# grep -r KubeJobCompletion ././kubernetes-prometheusRule.yaml: - alert: KubeJobCompletion两个elert的相干配置如下: ...

April 7, 2022 · 1 min · jiezi

关于kubernetes:快速上手云原生安全平台-NeuVector

作者简介万绍远,CNCF 基金会官网认证 Kubernetes CKA&CKS 工程师,云原生解决方案架构师。对 ceph、Openstack、Kubernetes、prometheus 技术和其余云原生相干技术有较深刻的钻研。参加设计并施行过多个金融、保险、制造业等多个行业 IaaS 和 PaaS 平台设计和利用云原生革新领导。前 言NeuVector 是业界首个端到端的开源容器平安平台,惟一为容器化工作负载提供企业级零信赖平安的解决方案。NeuVector 能够提供实时深刻的容器网络可视化、东西向容器网络监控、被动隔离和爱护、容器主机平安以及容器外部平安,容器治理平台无缝集成并且实现利用级容器平安的自动化,实用于各种云环境、跨云或者本地部署等容器生产环境。 此前,咱们介绍了 NeuVector 的装置部署、高可用架构设计和多云平安治理,本篇将演示 NeuVector 的根底性能,次要包含: 安全漏洞治理合规性检查和机密性查看策略管理准入控制策略动静平安响应行为监控我的项目地址:https://github.com/neuvector/... 本文次要基于 NeuVector 首个开源版 NeuVector:5.0.0-preview.1 进行介绍。 1.安全漏洞治理NeuVector 集成了 CVE 破绽库,每天自动更新,反对对平台(Kubernetes)、主机、容器、镜像仓库进行安全漏洞扫描。 配置主动扫描,当平台破绽库有更新,或有新的节点和容器退出时,会主动进行扫描。 针对不同破绽,有不同的危险级别提醒、对应的组件版本提醒和修复版本提醒。 针对每个破绽,NeuVector 能够展现对应的破绽公布工夫、破绽影响范畴、对应的组件影响版本。 对破绽进行过滤,检测是否曾经修复,以及破绽等级、公布工夫等。 1.1. 配置对接镜像仓库破绽扫描反对对接多种镜像仓库如 docker-registry(harbor)、JFrog Artifactory、Nexus 等。 以对接 Harbor 为例。配置连贯形式,填写连贯形式和认证信息,过滤器示意须要扫描的范畴,如扫描 uat 我的项目下全副镜像则 uat/*,如果须要扫描整个 Harbor 内全副镜像则 * 。测试设置能够验证编写的表达式的关联状况。 2.合规性检查和机密性查看NeuVector 的合规性审核包含 CIS 基线测试、自定义查看、秘密审核以及 PCI、GDPR 和其余法规的行业标准模板扫描。 “类型”示意对应的那个基线规范,如 K.4.1.1 对应 Kubernetes CIS 基线测试,4.1.1 容器对应的基线规范为 D 结尾,镜像对应的基线规范为 I 结尾。注:GDPR (General Data Protection Regulation,《通用数据保护条例》)为欧盟条例。在合规性查看中也会查看是否存在密文透露状况。 包含如以下密文透露状况: General Private KeysGeneral detection of credentials including 'apikey', 'api_key', 'password', 'secret', 'passwd' etc.General passwords in yaml files including 'password', passwd', 'api_token' etc.General secrets keys in key/value pairsPutty Private keyXml Private keyAWS credentials / IAMFacebook client secretFacebook endpoint secretFacebook app secretTwitter client IdTwitter secret keyGithub secretSquare product IdStripe access keySlack API tokenSlack web hooksLinkedIn client IdLinkedIn secret keyGoogle API keySendGrid API keyTwilio API keyHeroku API keyMailChimp API keyMailGun API key3.策略管理NeuVector 通过组的形式对容器和主机进行治理,对组进行合规性查看、网络规定、过程和文件拜访规定、DLP/WAF 的检测配置。 ...

April 7, 2022 · 2 min · jiezi

关于kubernetes:深度解析|基于-eBPF-的-Kubernetes-一站式可观测性系统

简介:阿里云 Kubernetes 可观测性是一套针对 Kubernetes 集群开发的一站式可观测性产品。基于 Kubernetes 集群下的指标、利用链路、日志和事件,阿里云 Kubernetes 可观测性旨在为 IT 开发运维人员提供整体的可观测性计划。 作者:李煌东、炎寻 摘要阿里云目前推出了面向 Kubernetes 的一站式可观测性零碎,旨在解决 Kubernetes 环境下架构复杂度高、多语言&多协定并存带来的运维难度高的问题,数据采集器采纳当下火出天际的 eBPF 技术,产品上反对无侵入地采集利用黄金指标,构建成全局拓扑,极大地升高了私有云用户运维 Kubernetes 的难度。 前言背景与问题以后,云原生技术次要是以容器技术为根底围绕着 Kubernetes 的标准化技术生态,通过规范可扩大的调度、网络、存储、容器运行时接口来提供基础设施,同时通过规范可扩大的申明式资源和控制器来提供运维能力,两层标准化推动了细化的社会分工,各畛域进一步晋升规模化和专业化,全面达到老本、效率、稳定性的优化,在这样的背景下,大量公司都应用云原生技术来开发运维利用。正因为云原生技术带来了更多可能性,以后业务利用呈现了微服务泛滥、多语言开发、多通信协议的特色,同时云原生技术自身将复杂度下移,给可观测性带来了更多挑战: 1、混沌的微服务架构 业务架构因为分工问题,容易呈现服务数量多,服务关系简单的景象(如图 1)。 图 1 混沌的微服务架构(图片起源见文末) 这样会引发一系列问题: 无法回答以后的运行架构;无奈确定特定服务的上游依赖服务是否失常;无奈确定特定服务的上游依赖服务流量是否失常;无法回答利用的 DNS 申请解析是否失常;无法回答利用之间的连通性是否正确;...2、多语言利用 业务架构外面,不同的利用应用不同的语言编写(如图 2),传统可观测办法须要对不同语言应用不同的办法进行可观测。 图 2 多语言(图片起源见文末) 这样也会引发一系列问题: 不同语言须要不同埋点办法,甚至有的语言没有现成的埋点办法;埋点对利用性能影响无奈简略评估; 3、多通信协议 业务架构外面,不同的服务之间的通信协议也不同(如图 3),传统可观测办法通常是在应用层特定通信接口进行埋点。 图 3 多通信协议 这样也会引发一系列问题: 不同通信协议因为不同的客户端须要不同埋点办法,甚至有的通信协议没有现成的埋点办法;埋点对利用性能影响无奈简略评估;4、Kubernetes 引入的端到端复杂度 复杂度是永恒的,咱们只能找到办法来治理它,无奈打消它,云原生技术的引入尽管缩小了业务利用的复杂度,然而在整个软件栈中,他只是将复杂度下移到容器虚拟化层,并没有打消(如图 4)。 图 4 端到端软件栈 这样也会引发一系列问题: Deployment 的冀望正本数和理论运行正本数不统一;Service 没有后端,无奈解决流量;Pod 无奈创立或者调度;Pod 无奈达到 Ready 状态;Node 处于 Unknown 状态;...解决思路与技术计划为了解决下面的问题,咱们须要应用一种反对多语言,多通信协议的技术,并且在产品层面尽可能得笼罩软件栈端到端的可观测性需求,通过调研咱们提出一种立足于容器界面和底层操作系统,向上关联利用性能观测的可观测性解决思路(如图 5)。 数据采集 图 5 端到端可观测性解决思路 ...

April 7, 2022 · 2 min · jiezi

关于kubernetes:K8S-Pod-新安全策略-Pod-Security-Admission-介绍-K8S-Internals-系列第一期

K8S Internals 系列:第一期容器编排之争在 Kubernetes 一统天下场面造成后,K8S 成为了云原生时代的新一代操作系统。K8S 让所有变得简略了,但本身逐步变得越来越简单。【K8S Internals 系列专栏】围绕 K8S 生态的诸多方面,将由博云容器云研发团队定期分享无关调度、平安、网络、性能、存储、利用场景等热点话题。心愿大家在享受 K8S 带来的高效便当的同时,又能够如庖丁解牛般领略其内核运行机制的魅力。 1. Pod Security Policy 简介因为Pod Security Admission指标是代替 Pod Security Policy,所以介绍它之前有必要先介绍一下Pod Security Policy,Pod Security Policy定义了一组Pod运行时必须遵循的条件及相干字段的默认值,Pod必须满足这些条件能力被胜利创立,Pod Security Policy对象Spec蕴含以下字段也即是Pod Security Policy可能管制的方面: 管制的角度字段名称运行特权容器privileged应用宿主名字空间hostPID,hostIPC应用宿主的网络和端口hostNetwork, hostPorts管制卷类型的应用volumes应用宿主文件系统allowedHostPaths容许应用特定的 FlexVolume 驱动allowedFlexVolumes调配领有 Pod 卷的 FSGroup 账号fsGroup以只读形式拜访根文件系统readOnlyRootFilesystem设置容器的用户和组 IDrunAsUser, runAsGroup, supplementalGroups限度 root 账号特权级晋升allowPrivilegeEscalation, defaultAllowPrivilegeEscalationLinux 性能(Capabilities)defaultAddCapabilities, requiredDropCapabilities, allowedCapabilities设置容器的 SELinux 上下文seLinux指定容器能够挂载的 proc 类型allowedProcMountTypes指定容器应用的 AppArmor 模版annotations指定容器应用的 seccomp 模版annotations指定容器应用的 sysctl 模版forbiddenSysctls,allowedUnsafeSysctls其中AppArmor 和seccomp 须要通过给PodSecurityPolicy对象增加注解的形式设定: seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default'seccomp.security.alpha.kubernetes.io/defaultProfileNames: 'docker/default'apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default' apparmor.security.beta.kubernetes.io/defaultProfileNames: 'runtime/default' Pod Security Policy是集群级别的资源,咱们看一下它的应用流程: ...

April 6, 2022 · 5 min · jiezi

关于kubernetes:K8S-笔记-部署-k8s-dashboard

1. 配置 /etc/hosts间接拜访 yaml 下载地址会失败,配置本地 host 解析即可。如下 4 个本地解析任选其一:185.199.108.133 raw.githubusercontent.com185.199.109.133 raw.githubusercontent.com185.199.110.133 raw.githubusercontent.com185.199.111.133 raw.githubusercontent.com 2. 下载 yamlwget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml3. 批改 yaml需注意 k8s 和 dashboard 的版本匹配问题,例如: dashboard v2.5.0 实用 kubernetes v1.23,metrics-scraper v1.0.7兼容性参考:https://github.com/kubernetes...3.1 命名空间默认为 kubernetes-dashboard,将其批改为 kube-system [root@k8s-master k8s-install]# sed -i '/namespace/ s/kubernetes-dashboard/kube-system/g' recommended.yaml3.2 NodePort 形式:为了便于本地拜访,批改 yaml 文件,将 service 改为 NodePort 类型,同时端口设置为 31260(大略位于 40 行和 44 行) [root@k8s-master k8s-install]# vim recommended.yaml...30 --- 31 32 kind: Service 33 apiVersion: v1 34 metadata: 35 labels: 36 k8s-app: kubernetes-dashboard 37 name: kubernetes-dashboard 38 namespace: kube-system 39 spec: 40 type: NodePort #减少type: NodePort 41 ports: 42 - port: 443 43 targetPort: 8443 44 nodePort: 31260 #减少nodePort: 31260 45 selector: 46 k8s-app: kubernetes-dashboard 47 48 ---4. 创立 dashboard pod[root@k8s-master k8s-install]# kubectl create -f recommended.yamlnamespace/kubernetes-dashboard createdserviceaccount/kubernetes-dashboard createdservice/kubernetes-dashboard createdsecret/kubernetes-dashboard-certs createdsecret/kubernetes-dashboard-csrf createdsecret/kubernetes-dashboard-key-holder createdconfigmap/kubernetes-dashboard-settings createdrole.rbac.authorization.k8s.io/kubernetes-dashboard createdclusterrole.rbac.authorization.k8s.io/kubernetes-dashboard createdrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard createdclusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard createddeployment.apps/kubernetes-dashboard createdservice/dashboard-metrics-scraper createddeployment.apps/dashboard-metrics-scraper created【审慎执行】若 kubernetes-dashboard.yaml 配置文件内容批改,通过执行如下命令,将原配置删除,从新执行 kubectl create 创立容器 ...

April 6, 2022 · 2 min · jiezi

关于kubernetes:自编写二进制安装kubernetes脚本v20版本

一键装置 二进制装置Kubernetes(k8s) v2.0 手动装置:https://github.com/cby-chen/K... 脚本装置:https://github.com/cby-chen/B... 应用阐明:该脚本示例须要十一台服务器,在十一台服务器中有一台是用于执行该脚本的, 另外有八台k8s服务器,其余俩台作为lb负载平衡服务器。 将其中服务器配置好动态IP,批改如下变量中的IP即可。 同时查看服务器中的网卡名,并将其批改。 执行脚本可应用bash -x 即可显示执行中详细信息。 该脚本已适配centos7和centos8。 脚本中hosts有俩处,记得批改。 2022-03更新: 现已反对centos7 和centos8 主动适配 同时反对自定义k8s node节点构造. 在变量中须要几台节点就写几台节点即可 留神的是,新增节点,要在脚本中的hosts中也要批改 不倡议乱改。 2022-04更新: 更新kubernetes自主版本抉择 优化执行构造 适配多版本 修复BUG 脚本中是须要在GitHub上下载软件包手动提前下载好wget https://github.com/cby-chen/Kubernetes/releases/download/cby/Kubernetes.tarwget https://github.com/cby-chen/Kubernetes/releases/download/v1.23.4/kubernetes-v1.23.4.tarwget https://github.com/cby-chen/Kubernetes/releases/download/v1.23.5/kubernetes-v1.23.5.tar下载脚本wget https://www.oiox.cn/Binary_installation_of_Kubernetes.sh批改参数vim Binary_installation_of_Kubernetes.sh如下:#每个节点的IP,以及vipexport k8s_master01="192.168.1.61"export k8s_master02="192.168.1.61"export k8s_master03="192.168.1.63"export k8s_node01="192.168.1.64"export k8s_node02="192.168.1.65"export k8s_node03="192.168.1.66"export k8s_node04="192.168.1.67"export k8s_node05="192.168.1.68"export lb_01="192.168.1.57"export lb_02="192.168.1.58"export lb_vip="192.168.1.59"#物理网络ip地址段,留神反斜杠转译export ip_segment="192.168.1.0\/24"#k8s自定义域名export domain="x.oiox.cn"#服务器网卡名export eth="ens18"批改hosts(有俩处)cat > /etc/hosts <<EOF127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6$k8s_master01 k8s-master01$k8s_master02 k8s-master02$k8s_master03 k8s-master03$k8s_node01 k8s-node01$k8s_node02 k8s-node02$k8s_node03 k8s-node03$k8s_node04 k8s-node04$k8s_node05 k8s-node05$lb_01 lb01$lb_02 lb02$lb_vip lb-vipEOF执行脚本bash -x Binary_installation_of_Kubernetes.shdashboard查看端口号kubectl get svc kubernetes-dashboard -n kubernetes-dashboard查看tokenkubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk https://www.oiox.cn/ ...

April 4, 2022 · 1 min · jiezi

关于kubernetes:适合-Kubernetes-初学者的一些实战练习-三

本系列的前两篇文章: 适宜 Kubernetes 初学者的一些实战练习 (一)适宜 Kubernetes 初学者的一些实战练习 (二)咱们曾经实现了下列在 Kubernetes 中的练习: 如何在 Kubernetes 里创立一个 Nginx 利用如何在 Kubernetes 里创立一个 Nginx ServiceKubenetes 里 Pod 和 Service 绑定的实现形式应用 Kubernetes 里的 job 计算圆周率后 2000 位Kubernetes 里的 ConfigMap 的用处应用脚本在 Linux 服务器上主动装置 Kubernetes 的包管理器 Helm一个简略的例子了解 Kubernetes 的三种 IP 地址类型应用 describe 命令进行 Kubernetes pod 谬误排查本文持续通过实战来学习 Kubernetes 相干常识。 练习1:通过 describe 命令学习 Kubernetes 的 pod 具体属性咱们能够首先应用 kubectl get pods 命令失去 pod 列表,比方咱们想钻研 pod nginx-storage-pod 的明细: 应用命令 kubectl describe pod nginx-storage-pod > nginx-storage-pod.yaml, 将 describe 命令的输入重定向到一个 yaml 文件里。用 vi 关上这个 yaml 文件: ...

April 3, 2022 · 3 min · jiezi

关于kubernetes:适合-Kubernetes-初学者的一些实战练习二

本系列的第一篇文章,咱们学习了每一个 Kubernetes 从业者的理论工作中简直都会应用的步骤:创立 Deployment 和 Service,同时通过理论例子解说了 Pod 和 Service 绑定的实现形式,介绍了应用 Kubernetes Job 计算圆周率这种费时的操作。 本文作为 Kubernetes 学习系列的第二篇文章,咱们持续学习 XX. 练习1 - 应用脚本在 Linux 服务器上主动装置 Kubernetes 的包管理器 HelmHelm 之于 Kubernetes 好比 yum 之于 Red Hat Enterprise Linux,或者 apt-get 之于 Ubuntu. Helm 是由 helm CLI 和 Tiller 组成,是典型的 Client/Server 利用。helm 运行于客户端,提供命令行界面;Tiller 利用运行于 Kubernetes 外部。 本练习应用一种全自动的做法,应用装置脚本主动装置。 (1) 主动下载安装脚本curl https://raw.githubusercontent... > get_helm.sh 关上脚本,能够看到 helm 装置的环境变量 HELM_INSTALL_DIR 为 /usr/local/bin: (2) chmod 700 get_helm.sh ...

April 3, 2022 · 3 min · jiezi

关于kubernetes:kubenetes常用命令

部署一个pod:kubectl apply -f kube-flannel.yml查看pod运行状况:watch kubectl get pods --all-namespaces查看所有namespace的pod状况:kubectl get pods --all-namespaces

April 1, 2022 · 1 min · jiezi

关于kubernetes:Rancher-v264-社区版发布-新特性解读

北京工夫 2022年4月1日,SUSE Rancher 工程团队公布了最新的 Rancher v2.6.4 版本,除了新个性之外,还解决了数百个 issue,以及各种如 Docker 和 Kubernetes 等生态更新的兼容验证工作。 与此同时,Rancher v2.4.18 作为 v2.4 系列的终结版也进行了公布,此版本没有个性更新,次要是一些要害 Bug 修复和安全更新。更具体的Release Note,请参考文末链接,Rancher v2.6.4见文末链接[1],Rancher v2.4.18 见文末链接[2]。 版本解读浏览版本的 Release Note 可能帮忙用户把握版本的要害性能改良和 Bug 修复,这里针对 Rancher v2.6.4 独自精简解读一些国内社区用户较为关注的要害个性。 # Kubernetes 上游跟踪通过一系列适配和社区上游的同步停顿,Rancher 将 Kubernetes v1.22 设定为默认版本,最高能够反对到 Kubernetes v1.23 版本。须要留神的是,对于v1.23的反对是试验性质的,根本应用没有问题,不过一些生态组件兼容性尚未残缺验证。用户在装置 Rancher 前,仍然倡议先浏览版本反对矩阵,依据本身环境状况,抉择适合的 Rancher 和 Kubernetes 版本。 请参考文末链接[3]。 # 治理立体性能观测随着 Rancher 在商业畛域的逐渐倒退,越来越多的客户应用 Rancher 来托管更大规模的集群和工作负载,一些无关 Rancher 性能的观测指标对优化工作越来越重要。依据一些具体案例优化施行教训,咱们总结了一些必要指标并在 Grafana 中进行敌对展现。请参考 issue#35737 。  # 单点到 HA 的迁徙门路很多用户在初始装置 Rancher 时抉择 single docker 单点模式,这种形式能够疾速体验,安装简单。随着治理规模的扩充,心愿变成 HA 架构的同时,保障元数据不失落。Rancher 提供了一种基于 Rancher Backup 的迁徙模式,让这种迁徙门路成为可能。请参考 issue#36057 。 ...

April 1, 2022 · 2 min · jiezi

关于kubernetes:K8S性能测试一kubemark介绍及集群手动搭建

什么是kubemarkkubemark是K8S官网给出的性能测试工具,可能利用相当小的资源,模拟出一个大规模K8S集群。其次要架构如图所示:须要一个内部 K8S集群(external cluster,须要带有worker节点)以及一套残缺的kubemark master管制面(能够是单节点也能够是多节点),即另外一个 K8S集群(kubemark集群),然而该只有master节点,没有worker节点。咱们须要在external cluster中部署运行hollow pod,这些pod会被动向kubemark集群中的master注册,成为kubemark集群中的 hollow node(虚构节点)。而后咱们就能够在kubemark集群中进行性能测试。尽管与实在集群的略微有点误差,不过能够代表实在集群的数据。 kubemark包含两个局部:一个实在的kubemark master管制面,能够是单节点也能够是多节点。一组注册到kubemark集群中的Hollow node,通常是由另一个k8s集群中的Pod模仿,该pod ip即为kubemark集群中对应Hollow node的IP。 通常来说的kubernetes节点与master通信有两类组件:kubelet,kubeproxy,而在Hollow node中:kubeproxy:应用HollowProxy代替,模仿有效的kukeproxy相干能力kubelet:应用HollowKubelet代替,模仿有效的kubelet相干性能,同时暴漏cadvisor端口供heapster抓取数据因而,Hollow nodes模仿了实在node上kubelet和kubeproxy的行为,能够对master组件做出正确响应,然而不会理论创立对应的pod等资源。 总结:在external kubernetes中创立hollow node,主动注册到kubemark kubernetes中作为fake node,而后在kubemark kubernetes中进行测试,从而测试k8s的治理面(Master)性能。 kubemark我的项目编译及镜像制作kubemark源码位于kubernetes我的项目中,编辑及制作kubemark镜像是搭建kubemark集群的第一步。筹备好go语言版本1.17以上的环境,环境中须要装置docker,如果应用国内网络请自行配置goproxy及docker镜像减速源,而后执行命令: mkdir -p $GOPATH/src/k8s.io/cd $GOPATH/src/k8s.io/git clone https://github.com/kubernetes/kubernetes.gitcd kubernetesgit checkout v1.20.10 # 此处为kubemark k8s对应的版本./hack/build-go.sh cmd/kubemark/cp $GOPATH/src/k8s.io/kubernetes/_output/bin/kubemark $GOPATH/src/k8s.io/kubernetes/cluster/images/kubemark/cd $GOPATH/src/k8s.io/kubernetes/cluster/images/kubemark/make build制作出的容器镜像为 staging-k8s.gcr.io/kubemark,能够通过docker image ls命令看到:此镜像后续须要在external k8s的worker节点中导入。 kubemark集群搭建实战如果是本人从头开始搭建,须要搭建两套K8S集群,一套为external k8s,须要搭建master+worker;另一套为kubemark k8s,只须要master即可。能够应用kubespray搭建,或者应用kubeadm搭建,在本文中不赘述。为不便演示,本次测试应用国内某云厂商提供的容器服务,创立两套K8S集群,配置如下:external k8s:3节点Master(2核4G云主机+50G数据盘) + 2节点Worker(4核8G云主机+50G数据盘)kubemark k8s:3节点Master(2核4G云主机+50G数据盘)将之前制作好的kubemark镜像导入external k8s的worker节点上,登录任意external k8s的master节点,执行以下操作:1.将kubemark k8s的config文件(任意kubemark k8s主节点的/root/.kube/config)拷贝到以后门路2.执行以下命令在external k8s中创立ns及secret kubectl create ns kubemarkkubectl create secret generic kubeconfig --type=Opaque --namespace=kubemark --from-file=kubelet.kubeconfig=config --from-file=kubeproxy.kubeconfig=config3.应用以下yaml创立资源 ...

April 1, 2022 · 2 min · jiezi

关于kubernetes:kubernetesk8s命名空间一直Terminating

root@hello:~# kubectl get nsNAME STATUS AGEauth Terminating 34mdefault Active 23hkube-node-lease Active 23hkube-public Active 23hkube-system Active 23h新开命令行窗口关上proxy root@hello:~# kubectl proxyStarting to serve on 127.0.0.1:8001回到方才窗口 将 terminating 状态的命名空间信息导出到 json 文件: root@hello:~# kubectl get namespace auth -o json >tmp.json批改json文件中的 finalizers,将其设置为空 root@hello:~# vi tmp.json root@hello:~# cat tmp.json | grep finalizers "finalizers": []在 temp.json 文件所在位置调上面的接口 root@hello:~# curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/auth/finalize*auth 改为须要删除的 terminating 状态的命名空间的名字 验证 root@hello:~# kubectl get nsNAME STATUS AGEdefault Active 23hkube-node-lease Active 23hkube-public Active 23hkube-system Active 23hroot@hello:~#https://www.oiox.cn/ ...

April 1, 2022 · 1 min · jiezi

关于kubernetes:kubernetesk8s部署-Metrics-Server-资源

    资源应用指标,例如容器 CPU 和内存使用率,可通过 Metrics API 在 Kubernetes 中取得。这些指标能够间接被用户拜访,比方应用 kubectl top 命令行,或者被集群中的控制器 (例如 Horizontal Pod Autoscalers) 应用来做决策。 配置api聚合层 增加配置api启动service文件--enable-aggregator-routing=true ps -ef |grep apiserver|grep enable-aggregator-routingroot 1147 1 10 10:23 ? 00:30:13 /usr/local/bin/kube-apiserver --v=2 --logtostderr=true --allow-privileged=true --bind-address=0.0.0.0 --secure-port=6443 --insecure-port=0 --advertise-address=192.168.1.30 --service-cluster-ip-range=10.96.0.0/12 --service-node-port-range=30000-32767 --etcd-servers=https://192.168.1.30:2379,https://192.168.1.31:2379,https://192.168.1.32:2379 --etcd-cafile=/etc/etcd/ssl/etcd-ca.pem --etcd-certfile=/etc/etcd/ssl/etcd.pem --etcd-keyfile=/etc/etcd/ssl/etcd-key.pem --client-ca-file=/etc/kubernetes/pki/ca.pem --tls-cert-file=/etc/kubernetes/pki/apiserver.pem --tls-private-key-file=/etc/kubernetes/pki/apiserver-key.pem --kubelet-client-certificate=/etc/kubernetes/pki/apiserver.pem --kubelet-client-key=/etc/kubernetes/pki/apiserver-key.pem --service-account-key-file=/etc/kubernetes/pki/sa.pub --service-account-signing-key-file=/etc/kubernetes/pki/sa.key --service-account-issuer=https://kubernetes.default.svc.cluster.local --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,ResourceQuota --authorization-mode=Node,RBAC --enable-bootstrap-token-auth=true --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.pem --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.pem --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client-key.pem --requestheader-allowed-names=aggregator --requestheader-group-headers=X-Remote-Group --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-username-headers=X-Remote-User --enable-aggregator-routing=true创立利用权限 RBAC 资源文件 root@hello:~/cby# cat metrics-rbac.yaml apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: system:aggregated-metrics-reader labels: rbac.authorization.k8s.io/aggregate-to-view: "true" rbac.authorization.k8s.io/aggregate-to-edit: "true" rbac.authorization.k8s.io/aggregate-to-admin: "true"rules: - apiGroups: ["metrics.k8s.io"] resources: ["pods", "nodes"] verbs: ["get", "list", "watch"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: metrics-server:system:auth-delegatorroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:auth-delegatorsubjects: - kind: ServiceAccount name: metrics-server namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata: name: metrics-server-auth-reader namespace: kube-systemroleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: extension-apiserver-authentication-readersubjects: - kind: ServiceAccount name: metrics-server namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: system:metrics-serverrules: - apiGroups: - "" resources: - pods - nodes - nodes/stats - namespaces verbs: - get - list - watch---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: system:metrics-serverroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:metrics-serversubjects: - kind: ServiceAccount name: metrics-server namespace: kube-system---apiVersion: v1kind: ServiceAccountmetadata: name: metrics-server namespace: kube-systemroot@hello:~/cby#创立 APIService 资源文件 ...

March 28, 2022 · 3 min · jiezi

关于kubernetes:KubernetesKubernetes集群搭建

一、前言为了便于学习容器编排,实际容器编排,本篇文章记录在本地虚拟机搭建一个准生产级别的Kubernetes集群。在此k8s集群的根底上,咱们能够尝试着容器化工作或者学习场景中的各种中间件集群,以及微服务利用。 二、集群搭建资源筹备从学习的目标登程,筹备搭建一个管制节点和两个工作节点的集群,为了节约老本,须要反对pod被调度到管制节点上。 2.1、机器筹备虚拟机节点角色系统配置装置组件k8s-master01主节点centos7,2核6Gkube-apiserver、kube-scheduler、kube-controller-manager、etcd、kube-proxy、kubeadm、kubelet、kubectl、dockerk8s-workder01工作节点centos7,2核6Gkubeadm、kubelet、kubectl、kube-proxy、dockerk8s-workder02工作节点centos7,2核6Gkubeadm、kubelet、kubectl、kube-proxy、docker2.2、组件介绍 组件名称组件类型部署形式组件形容kube-apiserver管制立体组件通过kubeadm容器化部署API 服务器是 Kubernetes 管制面的组件, 该组件公开了 Kubernetes API。 API 服务器是 Kubernetes 管制面的前端kube-scheduler管制立体组件通过kubeadm容器化部署负责监督新创建的、未指定运行节点(node)的 Pods,抉择节点让 Pod 在下面运行kube-controller-manager管制立体组件通过kubeadm容器化部署从逻辑上讲,每个控制器都是一个独自的过程, 然而为了升高复杂性,它们都被编译到同一个可执行文件,并在一个过程中运行etcd管制立体组件通过kubeadm容器化部署etcd是兼具一致性和高可用性的键值数据库,作为保留 Kubernetes所有集群数据(资源对象等)的后盾数据库kubelet节点组件yum装置,无奈容器化部署kubelet 接管一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中形容的容器处于运行状态且衰弱。 kubelet 不会治理不是由 Kubernetes 创立的容器kube-proxy节点组件通过kubeadm容器化部署kube-proxy 是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。kube-proxy 保护节点上的网络规定。这些网络规定容许从集群外部或内部的网络会话与 Pod 进行网络通信。docker节点组件yum装置docker引擎,k8s反对的一种容器运行时实现kubeadm集群辅助部署工具yum装置k8s官网集群部署工具kubectl客户端工具yum装置用来与集群通信的命令行工具2.3、筹备工作确认无论是本地物理机还是私有云上的虚拟机,都应该保障以下几点要求 满足装置 Docker 我的项目所需的要求,比方 64 位的 Linux 操作系统、3.10 及以上的内核版本x86 或者 ARM 架构均可机器之间网络互通,容器网络互通的前提有外网拜访权限,因为须要拉取镜像(也可手动下载好镜像)节点之中不能够有反复的主机名、MAC 地址或 product_uuid开启机器上的某些端口,详情参照k8s官网,k8s组件端口协定禁用替换分区。为了保障 kubelet 失常工作2.4、实际部署指标在所有节点上装置 Docker 和 kubeadm部署 Kubernetes Master部署容器网络插件部署 Kubernetes Worker部署 Dashboard 可视化插件部署容器存储插件三、集群搭建3.1、装置docker引擎k8s通过下层CRI接口对接容器运行时实现,这里咱们采纳docker引擎这个容器运行时实现。因为咱们采纳的是centos7的机器部署k8s集群,此处采纳yum源装置docker引擎 Centos7 yum源装置docker引擎参考docker官网的装置手册留神:配置 Docker 守护程序,尤其是应用 systemd 来治理容器的 cgroup,放弃docker与kubelet的cgroup驱动统一[root@vm-k8s-master ~]# cat /etc/docker/daemon.json { #配置docker的镜像仓库,减速镜像的拉取 "registry-mirrors": ["https://hub-mirror.c.163.com","https://reg-mirror.qiniu.com"], #配置cgroup驱动为systemd "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, #对于运行 Linux 内核版本 4.0 或更高版本,或应用 3.10.0-51 及更高版本的 RHEL 或 CentOS 的零碎,overlay2是首选的存储驱动程序。 "storage-driver": "overlay2"}3.2、装置kubeadm3.2.1、配置主机名k8s集群节点之中不能够有反复的主机名、MAC 地址或 product_uuid ...

March 27, 2022 · 33 min · jiezi

关于kubernetes:Kubernetes中API的不同版本-Alpha-Beta-Stable-都是什么

在Kubernetes开发中,咱们常常能够看到不同的版本如:alpha, beta, stable 。那么这些不同的版本有什么区别呢? 我在 https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api_changes.md#alpha-beta-and-stable-versions 这里找到了答案,以下是此局部翻译内容: 新性能的开发经验了以下一系列的状态,一直倒退成熟: Development Level 开发级别对象版本:没有规定可用性:不会提交到次要的kubernetes仓库,因而在官网的正式公布版本中并不可用用户:其余在此性能和概念上有严密单干的开发者(比方client的开发者)可降级性,可靠性,完整性,和反对:没有要求和保障Alpha Level对象版本:蕴含alpha 的API版本命名(比方:v1alpha1)可用性:提交到了次要 kubernetest 仓库; 呈现在正式的公布版本中; 性能是默认出于非启用状态,然而能够通过 flag 启用用户:开发者以及一些心愿对晚期性能给出反馈的专家用户完整性:一部分API操作,CLI命令,以及UI反对兴许还未实现; API还未通过 API审查(即,在个别的代码审查的根底上,对API进行深刻的,有针对性的审查)可降级性: API对象模式和语义可能在将来的版本中变更,无需在现有的集群中保留该对象;移除可降级性的担心能够不便开发者疾速的进行开发;特地的,API版本能够比miner release(主要公布)更快节奏的减少,并且开发者不须要保护多个版本;当API对象的模式和语义以不兼容的形式变更时,开发人员须要减少API版本集群可靠性:因为性能绝对较新,所以可能不足齐全的e2e测试,通过flag的形式启用性能可能会裸露一些集群不稳固的bug(比方,一个在管制循环(control loop)的中的bug可能造成迅速创立过多的对象,导致API存储资源耗尽)反对:并不保障肯定会实现改性能,该性能可能会在将来的版本中齐全被弃用倡议的应用场景:因为其可降级性问题,以及不足长期反对的问题,该版本API只倡议长期的测试集群应用Beta Level对象版本:蕴含 beta 的API版本命名(比方:v1beta1)可用性:官网公布版本中存在,默认开启用户:对于提供反馈感兴趣的用户完整性:所有的API操作,CLI命令以及UI反对都应该实现了;具备残缺的e2e测试;API曾经过API审查并通过,尽管beta期间应用常常会冒出API审查没有思考到的问题可降级性: 对象的构造和语义可能会在将来的版本中变更;变更产生时,降级路线将会被记录;在一些状况下,对象会被主动的转化为新的版本;而在另一些状况下,可能须要人工降级;人工降级可能要求依赖新性能的局部下线,并要求手动将对象转为新版本;人工转化时,须要提供文档记录转化过程;集群可靠性:因为该性能目前具备e2e测试,所以通过flag启用性能,并不会造成其余不想关性能的bug;然而因为是一个新性能,所以可能会有一些次级bug反对:我的项目承诺会实现这个性能,个别在接下来的一个稳固版本中;个别会在3个月之内实现,有时可能会更久;公布的版本应该至多在一个次级公布周期中,同时反对两个练习的版本(比方 v1beta1和v1bata2, 或 v1beta2和v1),这样用户能够有足够的工夫来降级倡议的应用场景:长期的测试环境;也能够短暂的部署在生产环境以获取用户反馈Stable Level对象版本:格局为 vX, 其中X是整数(比方:v1) 的API版本命名可用性:官网公布版本中存在,默认开启用户:所有用完整性:必须在开释的一致性配置文件中,进行SIG架构批准的一致性测试(比方:不可移植或 可选性能,可能不再默认的配置中)可降级性:只有具备严格兼容性的变更才容许在接下来的公布版本中退出集群可靠性:高反对:该API版本竟在接下来的很多公布版本中存在倡议的应用场景:任何场景

March 24, 2022 · 1 min · jiezi

关于kubernetes:AutoK3s-v048-发布-与-Harvester-梦幻联动

作者简介鞠宏超,SUSE SW Engineering, 6 年云计算畛域教训,先后参加了 Longhorn 产品研发、Rancher2.x 产品研发,目前次要致力于 Rancher 企业版产品设计与研发工作,AutoK3s 的外围维护者。AutoK3s 是一款 K3s 集群自动化部署工具,能够不便开发者自助治理多云环境中的 K3s 集群。之前的版本反对了 AWS/Aliyun/Tencent/Google 四个支流私有云,同时能够帮忙开发者治理本地 K3d 集群。 最新的 v0.4.8 版本个性预览: 反对 Harvester Provider,用户能够在 Harvester 上疾速创立虚拟机,并主动搭建 K3s 集群。反对 Google Provider,用户能够在 GCE 上疾速创立虚拟机,并主动搭建 K3s 集群,同时反对主动部署 Google K8s Cloud Provider(CCM)。加强 Native Provider 个性,用户当初能够在 UI 上治理和保护 Native 模式创立的 K3s 集群。本文将基于最新的 v0.4.8 版本,为大家介绍如何实现 AutoK3s 与 Harvester 的梦幻联动。 本文所应用的环境版本信息: PS:如果您还未搭建过 Harvester 集群,能够查看 Harvester 的相干介绍或拜访 Harvester 中文文档:http://docs.rancher.cn/harves... 一键启动如果您是 Linux 或者 MacOS 用户,能够应用以下脚本装置 AutoK3s,并启动 UI Portal: $ curl -sS http://rancher-mirror.cnrancher.com/autok3s/install.sh | INSTALL_AUTOK3S_MIRROR=cn sh$ autok3s serve或者应用 Docker 一键启动 UI Portal:  ...

March 23, 2022 · 2 min · jiezi

关于kubernetes:Kubernetes-API规范为optional的字段使用pointer

首先请看一下kubernetes core的API代码:https://github.com/kubernetes... 咱们能够发现,只有是 optional 的字段,那么必然是一个pointer: // nfs represents an NFS mount on the host that shares a pod's lifetime // More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs // +optional NFS *NFSVolumeSource `json:"nfs,omitempty" protobuf:"bytes,7,opt,name=nfs"`再比方: // volumeMode defines if a volume is intended to be used with a formatted filesystem // or to remain in raw block state. Value of Filesystem is implied when not included in spec. // +optional VolumeMode *PersistentVolumeMode `json:"volumeMode,omitempty" protobuf:"bytes,8,opt,name=volumeMode,casttype=PersistentVolumeMode"`这是为什么呢? ...

March 21, 2022 · 1 min · jiezi

关于kubernetes:如何在-K3s-中启用-Traefik-Dashborad

作者简介王海龙, SUSE Rancher 中国社区技术经理,负责 Rancher 中国技术社区的保护和经营。领有 8 年的云计算畛域教训,经验了 OpenStack 到 Kubernetes 的技术改革,无论底层操作系统 Linux,还是虚拟化 KVM 或是 Docker 容器技术都有丰盛的运维和实践经验。前 言Traefik 是一个开源的边缘路由器,能够让你的服务公布变得轻松乏味。它负责接管你的零碎申请,并应用适合的组件解决这些申请。 Traefik 的仪表板十分便捷,可能提供集群以后状态的具体概述,包含集群入口和服务网格路由配置的详细信息: K3s 是经 CNCF 一致性认证的 Kubernetes 轻量级发行版,专为物联网及边缘计算设计。在 K3s 中,内置了 Traefik 作为集群的默认反向代理和 Ingress Controller。K3s 1.21 开始默认装置 Traefik v2,而之前的版本则默认装置 Traefik v1。本文将依据不同的 Traefik 版本来介绍如何启用 Traefik Dashborad。 Traefik v1 启用 Dashborad默认状况下,K3s 1.20 及更早版本默认装置 Traefik v1,并且默认没有启用 Traefik Dashboard。如果要在 K3s 中启用 Traefik v1 的 Dashborad,咱们能够借助 HelmChartConfig 来自定义由 Helm 部署的 Traefik v1 并启用 Dashboard: 留神: 不倡议手动编辑 /var/lib/rancher/K3s/server/manifests/traefik.yaml 来批改 Traefik 配置文件,因为 K3s 重启后会笼罩批改的内容。倡议通过在 /var/lib/rancher/K3s/server/manifests 中创立一个额定的 HelmChartConfig 清单来自定义 Traefik 配置,请参考:http://docs.rancher.cn/docs/K...cat >> /var/lib/rancher/K3s/server/manifests/traefik-config.yaml << EOFapiVersion: helm.cattle.io/v1kind: HelmChartConfigmetadata: name: traefik namespace: kube-systemspec: valuesContent: |- dashboard: enabled: true domain: "traefik.localhost"EOF此时,Traefik 将会重新部署,大概 10 秒钟左右,就能够通过 spec.valuesContent.domain 配置的域名来拜访Traefik Dashboard 了: ...

March 21, 2022 · 1 min · jiezi

关于kubernetes:kubernetes安装

机器筹备IPCPUmemoryrole172.168.20.1354x16Gnode1172.168.20.1364x32Gnode2172.168.20.1374x8Gmaster根底环境敞开、禁用防火墙systemctl stop firewalld systemctl disable firewalld 禁用selinuxsed -i 's/enforcing/disabled/' /etc/selinux/config 敞开swap分区swapoff -avim /etc/fstab--->正文#/dev/mapper/centos-swap swap swap defaults 0 0free -mvim /etc/sysctl.conf--->增加vm.swappiness=0sysctl -pfree -m查看swap是否为0 设置主机名hostnamectl set-hostname k8smaster master批改hosts文件只在master执行: cat >> /etc/hosts << EOF172.168.20.137 k8smaster172.168.20.135 k8snode1172.168.20.136 k8snode2EOF将桥接的ipv4流量传递到iptables的链所有机器执行: cat > /etc/sysctl.d/k8s.conf << EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF命令失效sysctl --system 工夫同步yum install -y ntpdatentpdate ntp.aliyun.com 装置docker增加docker-ce的yum源wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repoyum clean allyum makecache下载、启动yum -y install docker-ce-18.06.1.ce-3.el7systemctl enable docker && systemctl start dockerdocker --version批改docker镜像源cat > /etc/docker/daemon.json << EOF{ "registry-mirrors": ["https://yqsuaswv.mirror.aliyuncs.com"]}EOF重启systemctl restart dockerkubernetes装置增加阿里云yum源cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF装置kubeadm,kubelet,kubectlyum -y install kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0systemctl enable kubelet #设置开机启动master init设置master:初始化apiserver,controller等等组件(初始化实现后,能够应用docker images查看所有组件) ...

March 19, 2022 · 1 min · jiezi

关于kubernetes:k8s集群Job负载支持多个Pod可靠并发执行如何权衡利弊选择适合的并行计算模式

k8s集群Job负载反对多个Pod牢靠并发执行,如何权衡利弊抉择适宜的并行计算模式?简略聊聊你对工作负载Job的了解?Job 反对多个 Pod 牢靠的并发执行,如何权衡利弊抉择适宜的并行计算模式?Job管制并行理解吗?为什么线上理论并行性可能比并行性申请略大或略小? 囧么肥事-胡言乱语 简略聊聊你对工作负载Job的了解?在说工作负载Job执行原理之前,先理解下为什么会须要Job负载? 对于ReplicaSet、ReplicationController等持久性负载来说,它们的职责是让Pod保留预期的正本数量,稳固长久运行。 除非被动去更改模板,进行扩缩操作,否则这些Pod始终长久运行,并且运行的是持久性工作,比方Nginx,MySQL等。 咦?长久工作,那么万事万物有绝对面,太极分阴阳,同样,工作除了长久工作外,也有非长久工作。 身边哪些是非长久工作呢? 咱们在日常的工作中常常都会遇到一些须要进行批量数据处理和剖析、或者是依据工夫调度的需要,这些属于短期性质的工作。不须要长久运行,仅执行一次就完结。例如进行数据库跨库同步,热点数据统计分析等。也能够在特定工夫调度单个工作,例如你想调度低沉闷周期的工作。 这些执行实现就完结,实现了咱们设定的某个指标就能够终止的,咱们划分为非长久工作。 好了,既然晓得了工作划分,而且k8s中ReplicaSet、ReplicationController等持久性负载是保障Pod稳固长久运行,那么对抗的,Job负载的职责就是保障非长久工作在生命周期内达成使命后体面终止。 须要Job负载,其实就是对持久性负载的补充。 简略来说:“Pod,你去实现你的工作,实现之后我给你个体面的完结”。 过眼云烟这个成语形容Job负载治理的Pod十分适合。昙花的指标是绽开,绽开结束后立即凋零。Job Pod 实现工作,终结,刚刚好。 接下来说说Job负载工作原理 Job 负载会创立一个或者多个 Pods,执行指标工作,在节点硬件生效或者重启状况下将持续重试 Pods 的执行,直到指定数量的 Pods 胜利终止。 随着 Pods 胜利完结,Job 跟踪记录胜利实现的 Pods 个数。 当数量达到指定的胜利个数阈值时,工作(即 Job)完结。 删除 Job 的操作会革除所创立的全副 Pods。 挂起 Job 的操作会删除 Job 的所有沉闷 Pod,直到 Job 被再次复原执行。 Job 反对多个 Pod 牢靠的并发执行,如何权衡利弊抉择适宜的并行计算模式?并行计算的模式有好多种,每种都有本人的强项和弱点,如何衡量抉择? 讲个小故事,你是团队组长,手底下有三个得力助手,囧囧,大肥,阿三。 某天,有个重要的我的项目须要差遣一位助手去洽谈,你须要从中抉择一位,他们三个各有优缺点,你须要权衡利弊抉择一位。 囧囧,长处:工作负责,技能熟练,技术型人才,毛病,外向 大肥,长处:工作久,经验丰富,为人圆滑,经验型人才,毛病:太傲娇 阿三,长处:社交能力强,伶牙俐齿,社交天花板型人才,毛病:技能绝对差些 如果你作为组长,这次是跟客户洽谈单干事宜,你会差遣哪位小可爱呢? 好了,说完小故事,接下来话题回到Job负载。 Kubernetes Job 能够用来反对 Pod 的并发执行,然而呢?须要留神的是,Job 对象并非设计为反对须要严密互相通信的Pod的并发执行,例如科学计算。 Job 对象反对并发解决一系列互相独立然而又互相关联的工作工作,例如:文件转码,发送邮件,渲染视频帧等 延长:Job有三种执行形式,能简略说说是什么吗? 第一种:非并行Job特点 ...

March 18, 2022 · 1 min · jiezi

关于kubernetes:kubernetes与velero的第一次尝试

背景接上文:Kubernetes中gitlab的一次迁徙。nexus也要迁徙一下。这里更想体验一些velero。很多文章下面看到过:https://mp.weixin.qq.com/s/VC6kVfcBCUQfG6RwM6F1QA 。腾讯云TKE文档中也有相似的例子:https://cloud.tencent.com/document/product/457/50122。不想应用传统形式了想体验一下velero!so velero迁徙一下kube-ops namespace 到另外一个集群的kube-ops1 namespace velero 迁徙kubernetes体验1. 下载安装 velero留神: 1-3步骤在备份和还原集群下面都要操作装置https://github.com/vmware-tanzu/velero看了一眼最新版本1.18.1.就下载了对应版本linux-amd64.tar.gz(墙裂,下载不下来。为是下载了放在本人的对象存储下面了!) [root@sh-master-02 ~]# wget https://github.com/vmware-tanzu/velero/releases/download/v1.8.1/velero-v1.8.1-linux-amd64.tar.gz[root@sh-master-02 ~]# tar zxvf velero-v1.8.1-linux-amd64.tar.gz [root@sh-master-02 ~]# cd velero-v1.8.1-linux-amd64/[root@sh-master-02 velero-v1.8.1-linux-amd64]# cp velero /usr/local/bin && chmod +x /usr/local/bin/velero[root@sh-master-02 velero-v1.8.1-linux-amd64]# velero version 2. 对于对象存储的开明阳明大佬还有其余很多文章都是采纳了minio.腾讯云的cos 还有 阿里云的oss也是能够的。偷懒了间接应用cos!先创立一个对象存储桶 3. 配置装置velero服务端配置密钥文件:cat credentials-velero [default]aws_access_key_id=<access key id>aws_secret_access_key=<secret access key>依照如下命令装置 velero 服务端: velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.1.0 --bucket kubernetes-xxxx \--secret-file credentials-velero \--use-restic \--default-volumes-to-restic \--backup-location-config \region=ap-guangzhou,s3ForcePathStyle="true",s3Url=https://cos.ap-guangzhou.myqcloud.com留神:gion s3 url bucket为腾讯与oos对应参数根本要配置的就是bucket存储桶名词 还有地区!期待velero命名空间下pod running! [root@sh-master-02 velero]# kubectl get pods -n velero ...

March 18, 2022 · 2 min · jiezi

关于kubernetes:SUSE-发布面向本土化的-Rancher-企业版-26

Rancher 企业版最早始于 “Rancher 中国” 期间,在 SUSE 实现对 Rancher 的收买之后,SUSE 的本土化偏向也使得这一策略失去连续,外乡客户也绝对青眼这种开源产品的落地模式。和其余 SUSE 产品相比,Rancher 企业版是个特地的存在,它是本地研发团队基于 Rancher Global 社区版的二次研发革新,并实现了齐全本土化的迭代,其指标是减少本地化个性,以及更快地响应、修复外乡客户提出的产品问题。同时,企业版并不是单次工程产品,而是持续性迭代产品。 作为企业版 v2.6 系列的首个版本,从去年 12 月份至今,v2.6.3-ent 历经了绝对较长的开发周期。因为在开发周期内,依然须要同步开发 v2.5 和 v2.4 版本,同时须要躲避 v2.6 晚期社区版的稳定性问题,咱们最终抉择在 v2.6.3 开源基线上进行企业版的公布,在放弃社区版本能力的根底上加强个性,并修复若干 BUG。 对标社区版的次要特色企业版在性能上是开源版本的超集,同时不毁坏原有开源产品的固有体验。咱们心愿传播给用户的是:Rancher 企业版的根本逻辑是可能提供更灵便、疾速的本地化反对,以及可持续性的本地化产品个性。在将来的某个工夫,用户能够在付出肯定技术老本后,从企业版切换回开源版本。除了一些本地罕用性能的 BUG 修复外,比照开源版本,企业版的一些特色体验如下: 放弃 Cluster Manager 体验社区版 v2.6 将 Cluster Explorer 作为主界面,对企业用户来说,应用体验产生了巨变;同时,也屏蔽了拜访 Cluster Manager 的间接通道。思考到企业用户切换 UI 格调带来的技术老本,企业版特意凋谢了 Cluster Manager 拜访的间接通道,并且对其进行持续性的保护,升高旧版本用户的降级代价。 凋谢 Harvester Explorer 体验在 Cluster Explorer UI 中,默认状况下,Harvester 集群只容许进行 VM 治理,不能进行容器治理。在 Feature Flags 页面中,开启特定的 feature explorer-harvester-cluster,能够凋谢 Harvester 集群的容器治理。 ...

March 18, 2022 · 1 min · jiezi

关于kubernetes:深度揭秘阿里云-Serverless-Kubernetes

简介:听阿里云技术专家聊聊 Serverless Kubernetes 一路走来的发展史,看看它是如何做到兼容 Kubernetes 应用形式的同时,领有免运维和极致弹性等特点~ 作者 | 陈晓宇(阿里云技术专家) 策动 | 褚杏娟 随同着云原生的倒退,从新近的单机版 Docker 到 Kubernetes 的编排畛域的一统江湖,再到云上托管 Kubernetes,技术风雨变动。明天咱们就沿着历史的脉络,一起看一下 Serverless Kubernetes 的发展史。 故事,从 Docker 讲起故事尽管从 Docker 讲起,但咱们不能漠视了 IaaS(Infrastructure as a Service)先辈们在后面的乘风破浪,以及云计算大佬们很早就确定的云计算倒退布局。 在十几年前,先辈们从依照用户应用(云平台提供能力)维度,将云分为三层: IaaS:Infrastructure as a Service,基础设施即服务,提供虚拟机或者其余根底资源作为服务提供给用户;PaaS:Platform as a Service,平台即服务,将平台作为服务提供给用户,譬如在平台中能够随用随取各种中间件服务;SaaS:Software as a Service,软件即服务,将利用作为服务提供给用户,譬如邮件服务。如下图所示,从 IaaS 到 PaaS,用户 (开发和运维) 越来越少地感知根底资源,更加关注到业务当中。 让业余的人做业余的事件,从而施展整体的最大效率。譬如一个初创的互联网买菜公司,没有必要本人去建机房、洽购硬件、配置网络存储以及装置操作系统等与业务无关的事件,而是更应该把精力放到业务的开发和经营下面。 通过十几年的倒退,IaaS 曾经比拟成熟,各种根底资源,如 ECS、VPC、EBS 等曾经深入人心,但 PaaS 的倒退却十分迟缓。 早在 2008 年,Google 就推出了 App Engine 服务,想打造一个开发平台,让开发者只须要编写业务代码就能够在 App Engine 下面运行。这个思维过于超前,开发者还不能齐全承受。除了私有云以外,开源社区 PaaS 平台也在左突右冲。其中,IBM 的 Cloud Foundry 和 Redhat 的 OpenShift 最为闻名,他们都心愿提供一个利用疾速公布的平台,但也都是不温不火,反而因为各种兼容问题越来越难应用。 ...

March 18, 2022 · 2 min · jiezi

关于kubernetes:Kubernetes中gitlab的一次迁移

背景:早些时候集群布局不合理,跑了gitlab与Nexus3服务,正好集群要到期了....哈哈起码小版本降级一下kubernetes集群更新一下证书?然而为筹备摈弃这个集群了。筹备迁徙服务!早些年将docker-compose搭建的gitlab 8版本的利用迁徙到过kubernetes 集群:docker 搭建gitlab迁徙到kubernetes集群(那还是2019年)。当初的集群是基于:Kubernetes 1.20.5 装置gitlab and Kubernetes1.20.5 gitlab13.6 update13.10的版本。具体版本为13.10.2。 迁徙过程1. 搭建gitlab集群参照Kubernetes 1.20.5 装置gitlab 。当然了 将gitlab镜像的tag批改为了 13.10.2! ubuntu@ap-shanghai-k8s-master-1:~$ kubectl get deployments gitlab -n kube-ops-o yaml|grep image 2. 备份原有gitlab利用备份这里出了一点小插曲...... 1. gitlab-rake or rake首先 老版本的备份命令是gitlab-rake,新的版本忘了从哪个版本开始变成了rake 请自行脑补查阅 2. rake执行目录而后就是rake命令应该在什么门路下执行:我特意切换到backups目录下执行发现就这样报错了......而后狐疑人生了很久.....正确的形式:在/home/git/gitlab目录下执行,如果有和我一样报错的看一下本人执行命令的目录是不是不对 切换目录到backups目录,查看生成备份文件: 3. kubectl copy文件到服务器kubectl cp gitlab-b9d95f784-7h8dt:/home/git/data/backups/1647419277_2022_03_16_13.10.2_gitlab_backup.tar /root/12 -n kube-ops3. 复原备份文件到kubernetes集群gitlab利用1. 将备份文件上传到kubernetes集群 中gitlab利用当然了 这里看集体了 : 能够从备份服务器scp到 kubernetes操作节点,也能够rzsz上传到节点而后执行kuberclt cp命令: kubectl cp 1647419277_2022_03_16_13.10.2_gitlab_backup.tar gitlab-84c7745d56-dsppz:/home/git/data/backups -n kube-ops最终是要将备份文件上传到新的容器内! 2.restore备份文件到新环境仍然留神操作门路...... rake gitlab:backup:restore依据报错降级了一下bundler gem也降级了一下! bundle update --bundler or gem install bundler:2.1.4gem update --system持续restore...... ...

March 17, 2022 · 1 min · jiezi

关于kubernetes:Rancher-和知乎超大规模多集群管理联合实践

源起知乎是中文互联网高质量的问答社区,每天有上千万用户在知乎分享常识、教训和见解,找到本人的答案。为配合不同阶段的业务倒退需要,知乎容器平台也在一直演进、晋升,目前简直所有的业务都运行在容器上。 这两年知乎开始应用 Rancher 治理 Kubernetes 集群,集群规模逐渐达到近万节点。本文将介绍 Rancher 如何针对大规模集群进行性能调优,最终访问速度晋升75%,达到页面拜访体验可用的状态。 对于为什么会抉择 Rancher 作为咱们的容器治理平台,大抵起因有以下几点: 咱们的业务部署在国内多家私有云 Kubernetes 上,须要对立的平台来治理这些 Kubernetes 集群,而 Rancher 针对国内的私有云 Kubernetes 平台兼容性十分敌对。 Rancher 升高了 Kubernetes 集群的部署和应用门槛,咱们能够借助 Rancher UI 轻松纳管和应用各个 Kubernetes 集群。不是很深刻理解 Kubernetes 的研发同学也能够轻松创立 Deployment、Pod、PV 等资源。 咱们能够借助 Rancher Pipeline 在外部实现 CI/CD,使研发专一于业务利用的开发。只管 Rancher 团队告知 Pipeline 曾经进行保护,然而它的简洁仍然合乎咱们外部对 CI/CD 的定位。 Rancher 的继续创新能力,还有围绕着 Kubernetes 进行了一系列的生态扩大及布局,比方:轻量级 Kubernetes 发行版 k3s、Kubernetes 的轻量级分布式块存储系统 Longhorn、基于 Kubernetes 的开源超交融基础设施 (HCI) Harvester、以及 Rancher 的下一代 Kubernetes 发行版 RKE2。追随头部翻新厂商,对团队的继续提高也是大有益处。 Rancher 作为国际化的容器厂商,在国内有十分业余的研发团队,沟通交流十分便捷。很多问题都能够在 Rancher 中文社区中找到答案,对于开源且收费的平台来说,能够说是十分良心了。 迷局起初,咱们在应用 Rancher 治理中小规模集群时,RancherUI 提供的性能简直能够满足咱们所有的需要,并且 UI 也十分晦涩。 ...

March 17, 2022 · 2 min · jiezi

关于kubernetes:OpenVSCode云端IDE加入Rainbond一体化开发体系

OpenVSCode 是一款基于Web 界面的在线IDE 代码编辑器,只须要PC端存在浏览器即可应用,更轻量,高效,简洁,其根底性能齐全继承了微软出品的 VS Code ,能够通过装置扩大的形式继续加强代码编辑能力。Rainbond 开源利用商店推出的 OpenVSCode 预装置了 gitlab-workflow 扩大用于对接私有化代码仓库 Gitlab,同时预装了常见语言运行环境(目前版本集成了Golang , Node.js , python , java ),能够在 Terminal 终端中疾速调试业务代码。 Rainbond 有能力疾速搭建一体化开发环境,通过对接代码仓库 webhook 机制,实现业务从代码开始,到最终上线的全流程。通过纳入 OpenVSCode 云端 IDE,能够将 Rainbond 一体化开发体系全副托管于云端,开发人员只须要一个浏览器,即可实现代码从编辑到上线的全流程。 为了实现上述的指标,本文会依照操作程序逐次解说: 一键装置 OpenVSCode 和 Gitlab借助 Rainbond 内置的开源利用商店,一键装置 OpenVSCode 和 Gitlab ,是搭建一体化开发体系最快捷的形式。OpenVSCode 对接 Gitlab借助 OpenVSCode 自带的扩大机制,实现与 Gitlab 的对接,能够获取 Gitlab 中的代码仓库。编码与调试在 OpenVSCode 的帮忙下,基于浏览器实现各种无关编码与调试的高级操作。Gitlab 对接 Rainbond通过 Oauth2.0 协定买通 Rainbond 与 Gitlab,不便地将 Gitlab 中的我的项目部署到 Rainbond 中去,并主动配置 Webhook 。代码提交触发主动构建验证整个场景的成果,从 OpenVSCode 提交代码后,实现 Rainbond 上部署我的项目的主动公布上线。一键装置 OpenVScode 和 Gitlab一体化开发体系中所援用的 OpenVSCode 和 Gitlab 都曾经退出 Rainbond 开源利用商店,供用户一键装置部署。 ...

March 17, 2022 · 1 min · jiezi

关于kubernetes:加速-Kubernetes-镜像拉取

减速 Kubernetes 镜像拉取从镜像拉取的过程来看,咱们能够从以下三个方面来减速镜像拉取: 缩减镜像大小:应用较小的根底镜像、移除无用的依赖、缩小镜像 layer 、应用多阶段构建等等。举荐应用 docker-slim放慢镜像仓库与 k8s 节点之间的网络传输速度。被动缓存镜像:Pre-pulled 预拉取镜像,以便后续间接应用本地缓存,比方能够应用 daemonset 定期同步仓库中的镜像到 k8s 节点本地。 本地缓存的镜像肯定会占用节点的磁盘空间,也就是说缓存的镜像越多,占用的磁盘空间越大,并且缓存的镜像默认始终存在,并没有 TTL 机制(比如说多长时间当前主动过期删除)。 然而,k8s 的 GC 机制会主动清理掉镜像。当节点的磁盘使用率达到 HighThresholdPercent 高百分比阈值时(默认 85% )会触发垃圾回收,此时 kubelet 会依据应用状况删除最旧的不再应用的镜像,直到磁盘使用率达到 LowThresholdPercent(默认 80% )。 题外话 2:镜像 layer 层数真的越少越好吗?咱们常常会看到一些文章说在 Dockerfile 里应用更少的 RUN 命令之类的缩小镜像的 layer 层数而后缩减镜像的大小,layer 越少镜像越小这的确没错,然而某些场景下得失相当。首先,如果你的 RUN 命令很大,一旦你批改了其中某一个小的局部,那么这个 layer 在构建的时候就只能从新再来,无奈应用任何缓存;其次,镜像的 layer 在上传和下载的过程中是能够并发的,而独自一个大的层无奈进行并发传输。

March 16, 2022 · 1 min · jiezi

关于kubernetes:K8S-笔记-使用-kubeadm-安装-k8s

阐明:本文是集体近期部署 k8s 试验环境的残缺笔记,齐全照着做就能顺利部署出一套 k8s 集群。 想理解 k8s 更多内容请移步 k8s 官网:https://kubernetes.io/ 想理解 kubeadm 的更多内容请参考:https://kubernetes.io/docs/re... 1. 部署 k8s 的后期筹备1.1 环境需要虚拟机:3 台,其中 1 台部署 k8s-master,2 台部署 k8s-slave 节点操作系统:CentOS 7硬件需要:CPU 至多 2c ,内存至多 2G 1.2 环境角色IP角色装置组件192.168.100.20k8s-masterkube-apiserver, kube-schduler, kube-controller-manager, docker, flannel, kubelet192.168.100.21k8s-slave1kubelet , kube-proxy , docker , flannel192.168.100.22k8s-slave2kubelet , kube-proxy , docker , flannel2. 设置 hostname(master 和 slave 都执行)依照下面表格的调配,在三台主机上别离执行: hostnamectl set-hostname k8s-masterhostnamectl set-hostname k8s-slave1hostnamectl set-hostname k8s-slave23. 设置 /etc/hosts(master 和 slave 都执行)cat <<EOF > /etc/hosts192.168.100.20 k8s-master192.168.100.21 k8s-slave1192.168.100.22 k8s-slave2EOF4. 设置 iptables(master 和 slave 都执行)iptables -P FORWARD ACCEPT5. 敞开 swap(master 和 slave 都执行)swapoff -a避免开机主动挂载 swap 分区(将 /etc/fstab 中的内容正文掉) ...

March 16, 2022 · 10 min · jiezi

关于kubernetes:使用-Rancher-进行首次金丝雀部署

过来,可怜的金丝雀会作为试验品,用来测试煤矿中甲烷的含量。用绳子将装有金丝雀的笼子放入矿井一段时间,再拉上来,如果金丝雀还活着,矿井就能够平安开采;如果金丝雀死亡,则不能开采。当初,这种办法早已弃用,因为这对动物太不人道了。 金丝雀总是在矿工身边彷徨,如果它进行鸣叫,则示意矿工必须来到矿井。 金丝雀部署是指两个版本的利用共存,新版本在开始时规模较小,解决的负载流量也较少。随着对新部署的剖析,所有申请逐步切换到新版本,而旧版本利用被移除。 人们普遍认为,治理这些部署的流量须要应用一个 Service Mesh,然而,要治理入站流量,你只需在 nginx ingress controller 上设置 annotations 即可: nginx.ingress.kubernetes.io/canary:  "true"nginx.ingress.kubernetes.io/canary-weight:  <num>这种办法的毛病是必须手动治理。为了实现自动化,咱们能够应用 Argo Rollouts (https://argoproj.github.io/ar...)。 运行Argo Rollouts增加 helm-repo: https://argoproj.github.io/ar... argo-rollouts chart: Helm-values: installCRDs: true批改 Deployment 并运行 Rollouts CRDScaleDown deployment,设置 Replicas 0: 运行 serviceapiVersion: v1kind: Servicemetadata: annotations: argo-rollouts.argoproj.io/managed-by-rollouts: rollout-pregap name: rollouts-pregap-canary namespace: pregapspec: clusterIP: 10.43.139.197 ports: - name: http port: 8080 protocol: TCP targetPort: 8080 selector: app: test2-pregap sessionAffinity: None type: ClusterIPapiVersion: v1kind: Servicemetadata: annotations: argo-rollouts.argoproj.io/managed-by-rollouts: rollout-pregapspec: clusterIP: 10.43.61.221 ports: - name: http port: 8080 protocol: TCP targetPort: 8080 selector: app: test2-pregap sessionAffinity: None type: ClusterIP运行 Rollouts CRD ...

March 15, 2022 · 1 min · jiezi

关于kubernetes:同事提出个我从未想过的问题为什么Kubernetes要多此一举推出静态Pod概念

共事提出个我从未想过的问题,为什么Kubernetes要"多此一举"推出动态Pod概念?咱们晓得k8s中Pod能够说是一个合格的容器小管家,Pod 被设计成反对多个容器能够一起进行调度,容器之间能够共享资源和依赖、彼此通信、协调何时以及何种形式运行或终止本身。 不晓得小伙伴有没有留神到咱们小管家的孪生兄弟动态Pod? 为什么k8s会推出动态Pod概念? 囧么肥事胡言乱语开课啦 动态 Pod 有什么非凡的中央呢?失常状况下Pod是在Master上对立治理,指定,调配。所谓动态Pod就是不承受Master的治理,在指定的node受骗 kubelet 启动时,会主动启动所有定义的动态Pod。 动态 Pod 间接由特定节点上的 kubelet 过程来治理,不通过 master 节点上的 apiserver 。⽆法与咱们常⽤的控制器 Deployment 或者 DaemonSet 进⾏关联,kubelet 间接监控每个Pod,并在故障生效时进行重启自愈。 动态 Pod 始终绑定在某⼀个 kubelet ,并且始终运⾏在同⼀个节点上。 既然发现API不能治理,为什么能“看见”运行的动态Pod?kubelet会为每个它治理的动态Pod,调用api-server在 Kubernetes 的 apiserver 上创立⼀个镜像 Pod(Mirror Pod)。因而咱们能够在 apiserver 中查问到该 Pod,也能通过kubectl等形式进行拜访,然而不能通过 apiserver 进⾏管制(例如不能删除)。 一般Pod失败自愈和动态Pod有什么区别?惯例Pod用工作负载资源来创立和治理多个 Pod。 资源的控制器可能解决正本的治理、上线,并在 Pod 生效时提供自愈能力。 自身节点能够尝试重启或者齐全替换操作,kubernetes默认的自愈机制是当Pod退出时对Pod进行重启。 如果重启失败,能够从新拉取Pod,实现替身替换: 例如,如果一个节点失败,控制器留神到该节点上的 Pod 曾经进行工作, 就能够创立替换性的 替身Pod。调度器会将替身 Pod 调度到一个衰弱的节点执行。 上面是一些治理一个或者多个 Pod 的工作负载资源的示例: DeploymentStatefulSetDaemonSet动态Pod是指定在特定的节点上运行的Pod,齐全交给kubelet进行监督自愈,重启也会在同一个指定的节点上进行重启。动态 Pod 始终绑定在某⼀个 kubelet ,并且始终运⾏在同⼀个节点上。 如果kubectl进行或者删除动态Pod会怎么?如果尝试删除或者进行,动态Pod会进入Pending状态,并且很快会被kubelet重启。 那如果我非要删除它呢? kubelet 启动时,由 –Pod-manifest-path= or –manifest-url= 参数指定的⽬录下定义的所有 Pod 都会主动创立。 ...

March 15, 2022 · 1 min · jiezi

关于kubernetes:在阿里巴巴我们如何先于用户发现和定位-Kubernetes-集群问题

简介:本文整顿自阿里云高级研发工程师彭南光(光南) 在 KubeCon China 2021 大会的演讲实录,分享了阿里巴巴是如何通过自研通用链路探测+定向巡检工具 KubeProbe 应答大规模集群的稳定性挑战的。对于阿里云云原生团队在本次 KubeCon 上分享的全部内容积淀于电子书《云原生与云将来的新可能》当中,可点击文末“浏览原文”下载。 作者:彭南光(光南) 本文整顿自阿里云高级研发工程师彭南光(光南) 在 KubeCon China 2021 大会的演讲实录,分享了阿里巴巴是如何通过自研通用链路探测+定向巡检工具 KubeProbe 应答大规模集群的稳定性挑战的。对于阿里云云原生团队在本次 KubeCon 上分享的全部内容积淀于电子书《云原生与云将来的新可能》当中,可点击文末“浏览原文”下载。 疾速发现和定位问题的能力是疾速复原零碎的基石,只有先做到疾速发现和定位问题,能力谈如何解决问题,尽量减少用户损失。那么如何在简单的大规模场景中,做到真正的先于用户发现和定位问题呢?我会将咱们在治理大型 Kubernetes 集群过程中疾速发现和定位问题的一些教训和实际带给大家——咱们是如何通过自研通用链路探测+定向巡检工具 KubeProbe 应答遇到的大规模集群的稳定性挑战的。 链路探测:模仿狭义用户行为,探测链路和零碎是否异样 定向检测:查看集群异样指标,发现将来存在或可能存在的危险点 零碎加强:发现问题提速增效,根因剖析 发现问题之后:后置检查和自愈,Chat-Ops 业务背景和挑战阿里云云原生利用平台的容器服务团队,领有 ACK 、ASI 等产品,治理了大规模的 Kubernetes 集群,不仅向内部私有云用户提供 Kubernetes 服务,还承当了阿里巴巴团体上云,阿里巴巴利用全面容器化的工作。 目前,整个阿里巴巴的业务都跑在 Kubernetes 集群上并实现了云原生和容器化,例如:天猫/淘宝/高德/考拉/饿了么等等。容器服务作为阿里云的管控底座,各种云服务也运行在这些集群之上,例如视频云/dataworks /MSE 微服务引擎/MQ 音讯队列等等。咱们须要对这些基础设施的稳定性负责。 当初,云原生的架构越来越风行,越来越多的产品和利用开始抉择云原生架构,这里有一张图,大抵示意了古代的云原生利用架构,利用生于云上,长于云上,各级提供分层的服务,这种分层的服务可能让业务和利用专一于业务层,屏蔽平台和基础设施层的简单概念。 从稳定性的角度来讲,这种利用的架构分层,下层利用的稳定性就会开始依赖底层基础设施的反对;另外,大一统的基座既为大规模的资源调度优化和在离线混部提供场景,也对基础设施团队保护大规模集群的稳定性问题提出极大的挑战。 这里有两张形象的图示能够展现出云原生利用架构下的业务利用和平台层基础设施的关系,Kubernetes 集群是非常复杂的,一个单集群的链路组件就有数十个甚至上百个之多,何况是大规模的多集群治理呢?但运行在下层的业务同学并不会感知到简单,因为咱们曾经把简单包掉了,留给用户的是一个简略的对立接口。就像淘宝这样的利用其实是非常复杂的,但在用户看来只是一个简略的提交订单而已,按键背地蕴含着极其简单的内容。为什么做到这样?因为咱们把简单留给了本人,把简略交给了用户。 很多时候,好的利用开发者不肯定是基础设施专家,云原生让业务专一业务,基础设施专一基础设施。同时,业务很多时候也只能关怀业务本身的稳定性,业务大多数时候没有能力关怀,或者是不心愿投入大量的人力关怀基础设施和平台层的稳定性,所以,对于平台层和基础设施的稳定性问题上,咱们须要把简单留给本人,把简略留给用户,为用户提供稳固的平台层服务。同时,更加关怀全局稳定性和全局的可用性,而不是单点可用性。 容器服务是阿里巴巴团体业务以及阿里云管控/云服务的底座,下面跑着各种各样的业务,如电商业务/中间件/二方业务/搜寻/阿里云云服务等等。此外还有数百个自研和开源的组件,每年数十万次的组件变更/数千个集群/数十万台节点,甚至大的集群单集群节点规模已过万。业务架构更是纷繁复杂,有单租集群、多租集群、vc 集群、联邦集群等等,同时还有各种在离线混布、对立调度、大促流动。在运行时也存在多种状态,如 runC,runD 等等。 因而组件的繁冗、变更频繁、用户场景各异、集群规模宏大、业务架构简单……都给业务带来了挑战: 挑战一:如何升高零碎危险。场景简单,业务形态各异,任何一个不起眼细节的脱漏或环节的处理不慎都有可能导致挫伤的扩大化; 挑战二:如何对用户集群的稳定性负责。如何先于用户发现和定位问题成为容器服务生产稳定性建设的重中之重,也是全局高可用体系的基石。 零碎是如此的简单,任何一个不起眼的细节脱漏或解决不慎都有可能导致非预期的挫伤,咱们要怎样才能升高零碎危险呢?另外咱们又是如何对形态各异的用户集群运行时全局稳定性负责的呢?如何能力先于用户发现和定位这些集群中曾经存在或行将产生的问题,是保障集群的稳定性建设的重中之重,也是 Kubernetes 全局高可用体系的基石。 思考和计划基于这些挑战,咱们做了一些思考和预设。下图是一个极度简化的用户公布扩容链路,虽说极度简化,但理论咱们仍能够看出,链路还是比较复杂的。 为了保障这次用户的扩容/公布链路畅通,咱们首先带来几个预设: 预设 1:链路简单组件泛滥,各组件别离降级迭代,数据监控无奈无死角笼罩全副场景; 预设 2:即便链路中各组件/节点监控数据失常,也不能保障集群整体链路 100% 可用,只有通过理论业务全链路探测能力确定理论可用的论断; ...

March 14, 2022 · 2 min · jiezi

关于kubernetes:cOStoolkitContainer-OS-的下一程

作者简介张智博,SUSE Rancher 大中华区研发总监,始终沉闷在研发一线,经验了 OpenStack 到 Kubernetes 的技术改革,在底层操作系统 Linux、虚拟化 KVM 和 Docker 容器技术畛域都有丰盛的研发和实践经验。背景:笔者已经保护过一款面向 Docker 的开源容器化操作系统 RancherOS。cOS-toolkit 作为连续 Container OS 思维的新兴我的项目,做了更深层次的形象。本文将逐渐分析 cOS-toolkit 的设计理念和应用办法,并分享集体的一些思考。 RancherOS 的反思RancherOS 公布之初,Docker 正是如日中天之时,牵强附会,RancherOS 的指标就是成为一款面向 Docker 的 Container OS。除了根底的 Immutable OS 规范个性之外,咱们做了很多魔改:比方把 dockerd 改为 system-docker 来替换 systemd,从而能够像治理容器一样治理一些零碎服务;极致裁剪了内核,心愿把它打造成以最低老本运行 Docker 的 OS;两层的 rootfs,当然用户空间的 rootfs 实质上是一个 Ubuntu/CentOS/Buildroot 等镜像运行的容器;应用 YAML 配置清单来做零碎初始化,通过这种形象来简化系统管理员的累赘等等。 随着工夫的推移,一些魔改的思路随着上游的倒退而变得不可继续,比方 system-docker 组件始终停留在晚期版本,无奈进化。精简内核也带来了诸多问题,未能背靠一个弱小的社区,很难继续保护这些内核以及零碎组件,并在兼容性上提供可信赖的保障。默认的 console 基于 Buildroot 我的项目构建,每次减少软件包都是十分繁琐简单的工作,并且 Buildroot 自身谋求的精简有时无奈满足服务器端的需要。用户的自定义需要很难失去满足,用户通常须要期待官网版本的更新,用户自定义的技术老本十分高,难以上手。 RancherOS 的倒退过程中获得了肯定数量的社区用户,并尝试了小范畴的商业化反对,它把想法变成事实,对于特定群体是一个好的开源我的项目。然而,从可继续倒退角度,进行保护是一个更感性的抉择。只管,可能看到社区用户依然在公布一些 RancherOS 的衍生版本 BurmillaOS(https://burmillaos.org/)。 cOS-toolkit 接棒下一程cOS-toolkit 是一个构建 ContainerOS 的工具包,之前 RancherOS 自身就是一个 Linux 发行版,而 cOS-toolkit 提供了构建这种发行版更弱小的形象能力。汲取之前的一些开源我的项目教训,联合当下市场的支流需要,cOS-toolkit 能够带来以下要害个性: 应用 Container 形式进行构建和降级。cOS-toolkit 应用了开源工具luet(https://github.com/mudler/luet),luet 是一个基于容器的多平台包管理工具。cOS-toolkit 的外围能力就来自于 luet,cOS-toolkit 自身就保护了若干 luet packages(https://github.com/rancher-sa...)。在各种 Linux 发行版的根底镜像之上,叠加这些 packages,就能够基于 Dockerfile 的模式构建 Container OS。这种作法能够依靠每个 Linux 发行版背地弱小的社区,cOS-toolkit 无需关注某个软件包如何编译集成,也不会毁坏每个发行版发烧友的应用习惯。 反对 OTA 更新。这个个性还处在一直进化中,Container OS 的 OTA 能够将更新内容构建后公布到镜像仓库中,通过 Kubernetes 的扩大编排能力来进行所有节点的系统升级,降级动作触发特定容器镜像更新,并利用到 cOS-toolkit 构建的 OS 中。 Cloud-init 反对,基于 systemd,以及不可变个性。Cloud-init 的反对能力间接反映了在私有云环境的敌对水平上;而基于 systemd 是可持续性倒退的一个重要抉择;对 Immutable 的反对在整个设计中具备优先权,这是简直所有 Container OS 的标配属性。简略不便的自定义。cOS-toolkit 不再只是一种发行版,它提供了更弱小的自定义构建能力,用户除了能够援用 cOS-toolkit 中保护的 packages,还能够自定义 package 进行扩大,同时 cOS-toolkit 自身还简化了各种 OEM 配置(https://rancher-sandbox.githu...),更换 branding 以及变更初始用户名明码会非常简单。弱小的自定义能力,还让用户能够针对云环境或者边缘环境等硬件规格个性来构建特定的 OS,针对各种硬件环境的驱动和软件包自身就依靠背地弱小的发行版社区,无论品质还是兼容性都有可靠保证。cOS-toolkit 工程会默认构建一些根底发行版: Blue:基于 FedoraGreen:基于 openSUSEOrange:基于 Ubuntu因为外围工程人员来自 SUSE,基于 openSUSE 的变种会进行较完整的测试,这些镜像介质能够在 Github Release(https://github.com/rancher-sa...)中下载。 SUSE Rancher 曾经开始用 cOS-toolkit 构建一些新兴产品,比方 Harvester OS 以及RancherOS v2。前者提供了 Harvester 集群的底座 OS,便于 Harvester 对节点进行更深层次的治理;后者将来将致力于提供能够面向 Rancher 以及 K3s/RKE2 的底座 OS,进一步简化产品部署和运维难度。RancherOS v2 也处于开源踊跃孵化中:https://github.com/rancher-sa... cOS-toolkit初体验反对私有云的敌对体验曾经是新兴操作系统的标配,cOS-toolkit 构建的 Green(基于openSUSE)变种齐全反对 AWS/Azure/GCP 等私有云。咱们以 AWS 版本为例进行初始体验,AMI 信息能够在Github Release(https://github.com/rancher-sa...)中下载到,本文体验版本为v0.7.4。 因为这些 AMI 在构建时默认应用 UEFI 形式启动,所以局部实例类型无奈反对,本次体验应用 t3.large。 默认状况下,零碎初始会进入 Recovery 模式,用户能够在该模式下进行自定义装置,通过内置的装置工具配合预约义的 YAML 配置进行零碎初始化装置。不过,因为咱们应用 AWS 云环境,咱们能够借助 cloud-init 机制来简化这一过程。在基于 cOS AMI 启动实例时(根磁盘 16GiB),配置以下 cloud-init 内容: name: "Default deployment"stages: rootfs.after: - name: "Repart image" layout: # It will partition a device including the given filesystem label or part label (filesystem label matches first) device: label: COS_RECOVERY add_partitions: - fsLabel: COS_STATE # 10Gb for COS_STATE, so the disk should have at least 16Gb size: 10240 pLabel: state - fsLabel: COS_PERSISTENT # unset size or 0 size means all available space pLabel: persistent initramfs: - if: '[ -f "/run/cos/recovery_mode" ]' name: "Set sshd to wait for deployment" files: - path: "/etc/systemd/system/sshd.service.d/override.conf" content: | [Unit] After=cos-setup-network.service network: - if: '[ -f "/run/cos/recovery_mode" ]' name: "Deploy cos-system" commands: - | cos-deploy --no-verify --no-cosign && shutdown -r now这份 cloud-init userdata 会帮忙咱们布局根磁盘分区表信息,同时进行初始化装置。留神 cos-deploy 时如果没有指定版本,则会装置最新版本。这意味着只管咱们应用 v0.7.4 的 AMI,但在 cos-deploy 后会在源中寻找更新的版本来部署到根磁盘中,这其实也是 OTA 更新机制的一部分。 ...

March 11, 2022 · 2 min · jiezi

关于kubernetes:Rancher-26-全新-Logging-快速入门

作者简介袁振,SUSE Rancher 技术支持经理,负责订阅客户售后技术支持团队,为订阅客户提供技术支持服务。2016 年开始接触容器、Kubernetes 技术,对自动化运维、Devops、Kubernetes、prometheus 和其余云原生相干技术具备较深刻的钻研,对 SRE 运维体系建设、SRE 运维零碎架构设计有着丰盛的实践经验。背景概述在 SUSE Rancher 2.5 以前,日志收集的架构是应用 Fluentd 收集指定目录日志或者容器规范输入流后,再通过 UI 日志性能页面的配置发送到指定的后端。如 Elasticsearch、splunk、kafka、syslog、fluentd 等常见的后端工具,能够自动化地收集 kubernetes 集群和运行于集群之上的工作负载日志。这种形式无疑是非常简单、易用、不便的,然而随着用户对云原生了解的加深,对业务日志剖析颗粒度要求的进步,之前的日志收集形式有些太过死板,灵活性十分差,曾经无奈满足对日志收集具备更高要求的用户了。 于是从 SUSE Rancher 2.5 版本开始,BanzaiCloud 公司的开源产品 Logging Operator 成为了新一代 SUSE Rancher 容器云平台日志采集性能的组成组件。SUSE Rancher 2.5 版本作为新日志组件的过渡版本,保留了老版本的日志收集形式,并将全新的 Logging Operator 作为试验性功能应用;SUSE Rancher 2.6 版本则曾经齐全应用了 Logging Operator 作为日志收集工具。 本文将由浅到深地摸索全新的 SUSE Rancher 2.6 Logging Operator 性能和它的应用形式。 什么是Logging OperatorLogging Operator 是 BanzaiCloud 基于云原生场景的开源日志采集计划,SUSE Rancher 2.6 版本在整合了该产品之后,将会在用户的操作下主动部署 Logging Operator 并主动配置 kuberletes logging pipeline。 Logging Operator 架构 以上是 Logging Operator 官网架构图。Logging Operator 应用 CRD 的形式决定了日志采集、规定路由、输入这三个阶段的配置,它应用 Daemonset 在集群节点上部署 Fluentbit 组件,应用 StatefulSet 部署 Fluentd 组件。首先由 Fluentbit 组件进行日志收集并初步解决之后,发送到 Fluentd 组件进行进一步的解析解决,最终由 Fluentd 组件发送到不同的后端工具上。 Logging Operator CRD上文提到,Logging Operator 应用 CRD 的形式决定了日志采集、规定路由、输入这三个阶段的配置,其应用的 CRD 次要有以下5种类型: logging:用于定义一个日志采集端 (FleuntBit) 和传输端 (Fleuntd) 服务的根底配置,在 SUSE Rancher 2.6 版本中,曾经由 Rancher 自动化部署实现;flow:用于定义一个 namespaces (命名空间)级别的日志过滤、解析和路由等规定;clusterflow:用于定义一个集群级别的日志过滤、解析和路由等规定;output:用于定义 namespace (命名空间)级别的日志的输入和参数,它只能被同命名空间内的 flow 关联;clusteroutput:用于定义集群级别的日志输入和参数,它能把被其余命名空间内的 flow 关联。以上 5 个 CRD 类型十分重要,决定了一个 Kubernetes 集群内每个命名空间甚至每个容器的日志输入到哪里。 启用 SUSE Rancher 2.6 LoggingSUSE Rancher 2.6 胜利创立上游 Kubernetes 集群后,能够在集群工具页面找到 Logging 工具的部署入口,如下图所示: 点击装置按钮后,抉择组件装置的我的项目,个别抉择为 System 我的项目,在该我的项目中运行与集群运行相干的组件;点击下一步后,UI 会要求输出配置 Docker 根目录和 System Log Path; 留神:如果底层容器运行时 (Runtime)为 Docker,默认为:/var/lib/docker。如果自定义过,请填写正确的 Docker Root Dir 目录,能够通过 docker info | grep Docker Root Dir 命令查看;留神:System Log Path 用于收集主机操作系统 Journal 日志,如果填写谬误会导致主机操作系统日志无奈收集,确认该门路的办法如下:## 确认Journal Log Path查看形式,在节点上执行以下命令cat /etc/systemd/journald.conf | grep -E ^\#?Storage | cut -d"=" -f21、如果返回persistent,则systemdLogPath应该是/var/log/journal;2、如果返回volatile,则systemdLogPath应该是/run/log/journal;3、如果返回auto,则查看/var/log/journal是否存在; - 如果/var/log/journal存在,则应用/var/log/journal; - 如果/var/log/journal不存在,则应用/run/log/journal;输出正确的 Docker 根目录和 systemdLogPath 后,点击装置,SUSE Rancher 2.6 会主动部署 Logging Operator ...

March 9, 2022 · 5 min · jiezi

关于kubernetes:Kubernetes家族容器小管家Pod在线答疑❓

Kubernetes家族容器小管家Pod在线答疑❓不晓得学习k8s的小伙伴们有没有跟我一样的疑难? k8s为什么不是间接运行容器,而是让Pod染指? Pod又是什么?为什么在利用容器化如此广泛的状况下k8s要推出Pod概念? 小葵花Pod课堂开课啦本文次要了解的一个外围点,什么是Pod?咱们先不关注Pod怎么应用,怎么调度,如何实现最佳实际。这些问题后续持续探讨,在不懂为什么k8s要有Pod的状况下,去先深究最佳实际没有实际意义。 囧么肥事-k8s专场 Pod官网定义Pod 是能够在 Kubernetes 中创立和治理的、最小的可部署的计算单元。 Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器 这些容器共享存储、网络、以及怎么运行这些容器的申明。 Pod 中的内容总是并置(colocated)的并且一起调度,在共享的上下文中运行。 Pod 所建模的是特定于利用的“逻辑主机”, 其中蕴含一个或多个利用容器, 这些容器是绝对严密的耦合在一起的。 Linux命名空间、cgroups*namespace* Linux namespace 提供了一种内核级别隔离系统资源的办法,通过将零碎的全局资源放在不同的namespace中来实现资源隔离的目标.Linux 中六类系统资源的隔离机制: ● Mount: 隔离文件系统挂载点 ● UTS: 隔离主机名和域名信息 ● IPC: 隔离过程间通信 ● PID: 隔离过程的 ID ● NetWork: 隔离网络资源 ● User: 隔离用户和用户组的 ID cgroups cgroups 限度一个过程组可能应用的资源下限,包含 CPU,内存,磁盘,网络带宽等,同时能够设置过程优先级,以及将过程挂起和复原等。 docker 角度了解PodPod 的共享上下文包含一组 Linux 名字空间、控制组(cgroup)和可能一些其余的隔离 方面,即用来隔离 Docker 容器的技术。 在 Pod 的上下文中,每个独立的利用可能会进一步施行隔离。 就 Docker 概念的术语而言,Pod 相似于共享名字空间和文件系统卷的一组 Docker 容器。 Pod 中多个容器如何协调?Pod 被设计成反对造成内聚服务单元的多个合作过程(模式为容器)。 ...

March 9, 2022 · 1 min · jiezi

关于kubernetes:Kubernetes-各个组件-启动参数介绍

kube-controller-manager Kubernetes 控制器管理器是一个守护过程,内嵌随 Kubernetes 一起公布的外围管制回路。在机器人和自动化的利用中,管制回路是一个永不休止的循环,用于调节零碎状态。在 Kubernetes 中,每个控制器是一个管制回路,通过 API 服务器监督集群的共享状态, 并尝试进行更改以将以后状态转为冀望状态。目前,Kubernetes 自带的控制器例子包含正本控制器、节点控制器、命名空间控制器和服务账号控制器等。 cat > /usr/lib/systemd/system/kube-controller-manager.service << EOF[Unit]Description=Kubernetes Controller ManagerDocumentation=https://github.com/kubernetes/kubernetesAfter=network.target[Service]ExecStart=/usr/local/bin/kube-controller-manager \--v=2 \--logtostderr=true \--address=127.0.0.1 \--root-ca-file=/etc/kubernetes/pki/ca.pem \--cluster-signing-cert-file=/etc/kubernetes/pki/ca.pem \--cluster-signing-key-file=/etc/kubernetes/pki/ca-key.pem \--service-account-private-key-file=/etc/kubernetes/pki/sa.key \--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig \--leader-elect=true \--use-service-account-credentials=true \--node-monitor-grace-period=40s \--node-monitor-period=5s \--pod-eviction-timeout=2m0s \--controllers=*,bootstrapsigner,tokencleaner \--allocate-node-cidrs=true \--cluster-cidr=172.16.0.0/12 \--requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.pem \--node-cidr-mask-size=24Restart=alwaysRestartSec=10s[Install]WantedBy=multi-user.targetEOF-v, --v int日志级别具体水平取值。--logtostderr 默认值:true将日志写出到规范谬误输入(stderr)而不是写入到日志文件。--root-ca-file string如果此标记非空,则在服务账号的令牌 Secret 中会蕴含此根证书机构。所指定标记值必须是一个非法的 PEM 编码的 CA 证书包。--cluster-signing-cert-file string蕴含 PEM 编码格局的 X509 CA 证书的文件名。该证书用来发放集群范畴的证书。如果设置了此标记,则不能指定更具体的--cluster-signing-* 标记。--cluster-signing-key-file string蕴含 PEM 编码的 RSA 或 ECDSA 私钥的文件名。该私钥用来对集群范畴证书签名。若指定了此选项,则不可再设置 --cluster-signing-* 参数。--kubeconfig string指向 kubeconfig 文件的门路。该文件中蕴含主控节点地位以及鉴权凭据信息。--leader-elect 默认值:true在执行主循环之前,启动领导选举(Leader Election)客户端,并尝试取得领导者身份。在运行多正本组件时启用此标记有助于进步可用性。--use-service-account-credentials当此标记为 true 时,为每个控制器独自应用服务账号凭据。--node-monitor-grace-period duration 默认值:40s在将一个 Node 标记为不衰弱之前容许其无响应的时长下限。必须比 kubelet 的 nodeStatusUpdateFrequency 大 N 倍;这里 N 指的是 kubelet 发送节点状态的重试次数。--node-monitor-period duration 默认值:5s节点控制器对节点状态进行同步的反复周期。--pod-eviction-timeout duration 默认值:5m0s在生效的节点上删除 Pods 时为其预留的宽限期。--controllers strings 默认值:[*]要启用的控制器列表。\* 示意启用所有默认启用的控制器;foo 启用名为 foo 的控制器;-foo 示意禁用名为 foo 的控制器。控制器的选集:attachdetach、bootstrapsigner、cloud-node-lifecycle、clusterrole-aggregation、cronjob、csrapproving、csrcleaner、csrsigning、daemonset、deployment、disruption、endpoint、endpointslice、endpointslicemirroring、ephemeral-volume、garbagecollector、horizontalpodautoscaling、job、namespace、nodeipam、nodelifecycle、persistentvolume-binder、persistentvolume-expander、podgc、pv-protection、pvc-protection、replicaset、replicationcontroller、resourcequota、root-ca-cert-publisher、route、service、serviceaccount、serviceaccount-token、statefulset、tokencleaner、ttl、ttl-after-finished默认禁用的控制器有:bootstrapsigner 和 tokencleaner。--allocate-node-cidrs基于云驱动来为 Pod 调配和设置子网掩码。--requestheader-client-ca-file string根证书包文件名。在信赖通过 --requestheader-username-headers 所指定的任何用户名之前,要应用这里的证书来查看申请中的客户证书。正告:个别不要依赖对申请所作的鉴权后果。--node-cidr-mask-size int32集群中节点 CIDR 的掩码长度。对 IPv4 而言默认为 24;对 IPv6 而言默认为 64。--node-cidr-mask-size-ipv4 int32在双堆栈(同时反对 IPv4 和 IPv6)的集群中,节点 IPV4 CIDR 掩码长度。默认为 24。--node-cidr-mask-size-ipv6 int32在双堆栈(同时反对 IPv4 和 IPv6)的集群中,节点 IPv6 CIDR 掩码长度。默认为 64。kube-scheduler ...

March 8, 2022 · 2 min · jiezi

关于kubernetes:Dockershim-即将被移除看-SUSE-Rancher-的应对之道

行业数字化转型热火朝天,企业正在全面转向云原生平台,并由此引发了架构计划、生产方式、思维模式、商业模式等一系列的改革。Gartner 的预测显示,到 2025 年,95% 以上的数字化转型计划将抉择云原生平台作为根底,而在 2021 年这一比例只有不到 40%。 与此同时,以容器为代表的云原生技术也在继续演进,尤其在 Kubernetes 成为云原生体系的技术外围当前。容器技术曾经进入 Kubernetes 时代,原来的技术体系正在悄悄扭转。早在 2020 年 12 月,Kubernetes 就发表将弃用 dockershim,从那时起,业界就在寻求移除 dockershim 的代替计划。 通过过来一年的过渡,日前,Kubernetes 发表,将在 Kubernetes 1.24 版本中删除 dockershim,该版本定于往年 4 月左右公布。对此,SUSE Rancher 作为一个开源的企业级 Kubernetes 治理平台,早已给出了应答之道。 在日前的相干主题直播中(https://www.bilibili.com/vide...),SUSE Rancher 大中华区研发总监张智博示意,针对习惯于应用 docker 的用户,SUSE Rancher 将持续为客户提供 Kubernetes+Docker 相干技术产品;对于那些心愿追随 Kubernetes 上游倒退的用户,SUSE Rancher 则通过提供 Kubernetes+Containerd 相干技术产品帮忙企业拥抱容器、拥抱云原生。 Kubernetes 崛起,弃用 Dockershim 是技术倒退的必然要弄清楚 Kubernetes 为何会弃用 dockershim,还要从容器技术的倒退说起。在容器技术崛起之前,业界最热门的技术是虚拟化平台,如 VMWare、OpenStack 等。只管虚拟机能够“虚构”出很多子系统,但存在占用空间大、启动慢、资源占用低等问题。 像 Docker 这样的容器技术,属于轻量级的“虚拟化”,它不须要“虚构”出整个操作系统,只须要“虚构”一个小规模的环境(相似“沙箱”),从而胜利躲避了虚拟机的毛病,受到业界的热烈欢迎和追捧。 不过,在 2013 年 Docker 开源当前,新的问题呈现了:Docker 只是创立容器的工具,是利用容器引擎,它自身并不是容器;如果想将 Docker 利用于具体的业务层面,还须要对其进行编排、治理和调度。2014 年,Kubernetes 横空出世并默认应用 Docker 作为容器运行,实现了对容器的编排、治理和调度。 随后,Kubernetes 的代码当中蕴含了很多与 Docker 相干的操作逻辑,为了可能做解耦,兼容更多的容器运行时,Kubernetes 将操作 Docker 的相干逻辑独立进去,组成了 dockershim。因而,dockershim 能够看作是 Kubernetes 的一个组件,次要目标是为了通过 CRI (容器运行时接口)操作 Docker;也就是说,dockershim 相当于 Kubernetes 和 Docker 的一个中转站或者枢纽。 这样一来,Kubernetes 或 Docker 有任何的性能变动,dockershim 代码都必须随之改变,以反对变更。但 Docker 的底层运行时是 containerd,而 containerd 也反对 CRI, Kubernetes 齐全能够绕过 dockershim 这一中转站间接通过 CRI 与 containerd 进行交互;此外,随着容器技术的演进,容器运行时也变得多种多样,Kubernetes 通过 CRI 即可与它们进行交互,dockershim 因而变得可有可无。 面对改革,SUSE Rancher 的倡议和应答之道只管 Kubernetes 行将弃用 dockershim,但这并不意味着 Docker 曾经过期;相同,Docker 的性能久经考验,技术也更为成熟,不仅领有宏大的用户群体,也是相当长一段时间里,企业发展容器技术利用的重要切入点。 在 Apache APISIX PMC 张晋涛看来,Docker 的倒退之所以浮现疲态,与其开源之后始终没有找到适合的商业化路线无关。将来,Docker 最外围的动作就是 Kubernetes 给开发者提供好用的容器技术,它的定位仍然是容器平台,而不是底层的容器运行时。 将来的容器运行时将是 containerd 的天下,张智博认为,弃用 dockershim 为containerd 的疾速遍及带来了新的时机,这一点在 2021年 CNCF Survey 上有很显著的展现,大多数用户均抉择 containerd 替换 Docker 的计划。不过,底层技术的改革并不会对企业用户带来多大影响,私有云和其余商业厂商以及开源社区会有足够多的技术路线来躲避危险。 正如张晋涛所说,采纳云服务的企业对容器运行时的切换其实是无感知的。即使企业采纳的不是云上托管而是自建云的模式,终端用户也无需关注这一点,只有企业中负责 Kubernetes 保护治理的运维人员才会在意。因而,张智博倡议,企业要以不变应万变,业务稳定性永远是第一考量,而非技术架构的先进性。 不论是 Kubernetes 的突飞猛进、Docker 的日渐式微,还是 containerd 的大势所趋,企业短期内都无需过分关注。对于那些构建在私有云上的业务,云厂商曾经帮忙企业客户解决了底层技术架构降级的问题;而对于构建了公有云的企业客户来说,他们也不用毁坏传统技术架构的稳定性和持久性,只须要在建设新的集群时逐渐实现 containerd 的逐渐代替和切换。 面对这一技术改革,SUSE Rancher 采纳了商业厂商面向开源社区推动的 cri-dockerd 计划,确保 RKE 集群能够持续利用 Docker 作为其容器运行时;而对于心愿追随上游倒退而移除 Docker 的用户,SUSE Rancher 的 K3s/RKE2 等开源产品均应用 containerd 作为默认运行时,K3s 能够面向本地开发以及边缘环境,RKE2 则能够面向数据中心应用场景。 也就是说,只管 SUSE Rancher 是开源厂商,但非常重视开源的商业化。尽管技术的发展趋向于 containerd,SUSE Rancher 并不会强制客户去 Docker,如果企业客户仍然在应用 Docker,SUSE Rancher 也会持续保护这类我的项目。 减速技术迭代,SUSE 激活企业有限翻新后劲在云原生畛域,Kubernetes 弃用 Dockershim 只是容器技术演进过程中的一个小插曲;以后,各行各业数字化转型继续深刻,企业客户正在向云计算技术提出越来越多的新要求。 日前,CNCF 公布的 2021 年度调查报告显示,96% 的企业正在应用或评估Kubernetes,这一数据是自 2016 年开启该项考察以来的历史新高。CNCF 认为,容器和 Kubernetes 的事实位置曾经坚固,随着技术的倒退,容器和 Kubernetes 将缓缓转向“幕后”工作;与过来相比,企业仿佛更密集地应用无服务器和托管服务,开发者也不肯定须要理解底层容器技术。 正是预判了这一趋势,SUSE 作为寰球最大的独立开源公司,在 2020 年实现了对 Kubernetes 治理畛域市场领导者 Rancher Labs 的收买,从而具备了全面笼罩企业级 Linux、容器、Kubernetes 和边缘计算等畛域的综合实力,能够帮忙企业客户在数据中心、云端、边缘侧等任意场景翻新。 2021年底,SUSE 通过 Kubernetes 构建的超交融基础架构(HCI)开源软件Harvester 正式 GA,自此 SUSE 的产品阵容曾经扩大到超交融基础设施畛域。不久前,SUSE 又正式公布了容器桌面管理工具 Rancher Desktop 1.0.0,能够帮忙企业客户在 Mac、Windows 和 Linux 零碎中以桌面模式治理 Kubernetes 和容器。 从容器到 Kubernetes,从企业级 Linux 到边缘计算,从开源到凋谢,SUSE 正在走向比云计算更广大的数字化星辰大海。

March 8, 2022 · 1 min · jiezi

关于kubernetes:实用教程-云原生安全平台-NeuVector-部署

作者简介万绍远,CNCF 基金会官网认证 Kubernetes CKA&CKS 工程师,云原生解决方案架构师。对 ceph、Openstack、Kubernetes、prometheus 技术和其余云原生相干技术有较深刻的钻研。参加设计并施行过多个金融、保险、制造业等多个行业 IaaS 和 PaaS 平台设计和利用云原生革新领导。前 言NeuVector 是业界首个端到端的开源容器平安平台,惟一为容器化工作负载提供企业级零信赖平安的解决方案。本文将从以下 5 个方面具体介绍如何部署 NeuVector: NeuVector 概览NeuVector 装置高可用架构设计多云平安治理其余配置1.NeuVector 概览NeuVector 致力于保障企业级容器平台平安,能够提供实时深刻的容器网络可视化、东西向容器网络监控、被动隔离和爱护、容器主机平安以及容器外部平安,容器治理平台无缝集成并且实现利用级容器平安的自动化,实用于各种云环境、跨云或者本地部署等容器生产环境。 2021年, NeuVector 被 SUSE 收买,并在 2022 年 1 月实现开源,成为业界首个端到端的开源容器平安平台,惟一为容器化工作负载提供企业级零信赖平安的解决方案。 我的项目地址:https://github.com/neuvector/... 本文次要基于 NeuVector 首个开源版 NeuVector:5.0.0-preview.1 进行介绍。 1.1. 架构解析 NeuVector 自身蕴含 Controller、Enforcer、Manager、Scanner 和 Updater 模块。  Controller :整个 NeuVector 的管制模块,API 入口,包含配置下发,高可用次要思考 Controller 的 HA ,通常倡议部署 3 个 Controller 模块组成集群。Enforcer :次要用于安全策略部署下发和执行,DaemonSet 类型会在每个节点部署。Manager:提供 web-UI(仅HTTPS) 和 CLI 控制台,供用户治理 NeuVector 。Scanner :对节点、容器、Kubernetes 、镜像进行 CVE 破绽扫描Updater :cronjob ,用于定期更新 CVE 破绽库1.2.次要性能概览安全漏洞扫描容器网络流量可视化网络安全策略定义L7 防火墙CICD 平安扫描合规剖析本文重点介绍装置部署,具体性能将在后续文章中深刻介绍。 ...

March 7, 2022 · 4 min · jiezi

关于kubernetes:kubeapiserver启动命令参数解释

在apiserver启动时候会有很多参数来配置启动命令,有些时候不是很明确这些参数具体指的是什么意思。 我的kube-apiserver启动命令参数: cat > /usr/lib/systemd/system/kube-apiserver.service << EOF[Unit]Description=Kubernetes API ServerDocumentation=https://github.com/kubernetes/kubernetesAfter=network.target[Service]ExecStart=/usr/local/bin/kube-apiserver \ --v=2 \ --logtostderr=true \ --allow-privileged=true \ --bind-address=0.0.0.0 \ --secure-port=6443 \ --insecure-port=0 \ --advertise-address=192.168.1.30 \ --service-cluster-ip-range=10.96.0.0/12 \ --service-node-port-range=30000-32767 \ --etcd-servers=https://192.168.1.30:2379,https://192.168.1.31:2379,https://192.168.1.32:2379 \ --etcd-cafile=/etc/etcd/ssl/etcd-ca.pem \ --etcd-certfile=/etc/etcd/ssl/etcd.pem \ --etcd-keyfile=/etc/etcd/ssl/etcd-key.pem \ --client-ca-file=/etc/kubernetes/pki/ca.pem \ --tls-cert-file=/etc/kubernetes/pki/apiserver.pem \ --tls-private-key-file=/etc/kubernetes/pki/apiserver-key.pem \ --kubelet-client-certificate=/etc/kubernetes/pki/apiserver.pem \ --kubelet-client-key=/etc/kubernetes/pki/apiserver-key.pem \ --service-account-key-file=/etc/kubernetes/pki/sa.pub \ --service-account-signing-key-file=/etc/kubernetes/pki/sa.key \ --service-account-issuer=https://kubernetes.default.svc.cluster.local \ --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname \ --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,ResourceQuota \ --authorization-mode=Node,RBAC \ --enable-bootstrap-token-auth=true \ --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.pem \ --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.pem \ --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client-key.pem \ --requestheader-allowed-names=aggregator \ --requestheader-group-headers=X-Remote-Group \ --requestheader-extra-headers-prefix=X-Remote-Extra- \ --requestheader-username-headers=X-Remote-User # --token-auth-file=/etc/kubernetes/token.csvRestart=on-failureRestartSec=10sLimitNOFILE=65535[Install]WantedBy=multi-user.targetEOF解释 ...

March 7, 2022 · 2 min · jiezi

关于kubernetes:跟k8s工作负载Deployments的缘起缘灭

跟k8s工作负载Deployments的缘起缘灭考点之简略介绍一下什么是Deployments吧?考点之怎么查看 Deployment 上线状态?考点之集群中能不能设置多个Deployments控制器具备重叠的标签选择器?考点之能够自定义Pod-template-hash 标签嘛?如果能够,有什么益处?如果不能够,有什么危害?考点之什么场景下会触发Deployments上线动作?考点之Deployments在更新时会敞开所有Pod嘛?如果不是,默认敞开最大比例是多少?考点之你能不能简略形容一下Deployments更新时RS和Pod是如何滚动更新的?考点之如何断定Deployment上线过程是否呈现停滞?有哪些起因会造成停滞?如何解决配额有余的问题?考点之保留订正历史会耗费 etcd 中的资源,并占用 `kubectl get rs` 的输入,如果给订正历史限度值设置为0是不是就能无效解决这个问题? 囧么肥事-胡言乱语 考点之简略介绍一下什么是Deployments吧?Deployments是k8s内置的工作负载之一,次要作用是帮忙咱们治理无状态Pod。 一个 Deployment 为 Pods 和 ReplicaSets 提供了申明式的更新能力,咱们只须要负责形容 Deployment 中的RS和Pod须要达到的指标状态,那么DM就会以一种受控速率去帮忙咱们更改RS和Pod的理论状态, 使其变为咱们冀望呈现的状态。 Deployment 很适宜用来治理你的集群上的无状态利用,Deployment 认为所有的 Pod 都是互相等价的,在须要的时候都是能够替换的。 Deployment: "小Pod 们,都给我听话"DM: "你们都不是惟一的"DM: "不听话,闹事的Pod"DM: "随时能够让你走人"DM: "大把的Pod能够替换你们"Pods: "是是是,咱们肯定听话"Deployment 是一个实干主义者,你如果好好工作,不闹事,那么所有OK,然而如果你有小心理,敢闹事,那它随时能够赶你走人,随时随地能够招新人。 考点之怎么查看 Deployment 上线状态?Deployment 的生命周期中会有许多状态。上线新的 ReplicaSet 期间可能处于Progressing(进行中),可能是 Complete(已实现),也可能是Failed(失败)进入阻塞停滞无奈持续进行。 利用kubectl rollout status 命令能够监督 Deployment 的进度。 假如创立了一个Nginx的DM,查看DM进度。 kubectl rollout status deployment/nginx-deployment哪些场景会让Deployment 进入这三种状态呢? 为了不便,后续DM均代表Deployment进行中(Progressing)当Deployment 执行上面的工作期间,Kubernetes 将其标记为进行中(Progressing): - DM创立新的 `ReplicaSet`- DM正在为最新的 `ReplicaSet` 执行扩容操作- DM 正在为旧的 `ReplicaSet`执行缩容操作- 新的 Pods 曾经就绪或者可用(就绪至多继续了 `MinReadySeconds` 秒)实现(Complete)当 Deployment 具备以下特色时,Kubernetes 将其标记为 实现(Complete): ...

March 4, 2022 · 2 min · jiezi

关于kubernetes:Kubernetes家族容器小管家Pod在线答疑❓

Kubernetes家族容器小管家Pod在线答疑❓不晓得学习k8s的小伙伴们有没有跟我一样的疑难? k8s为什么不是间接运行容器,而是让Pod染指? Pod又是什么?为什么在利用容器化如此广泛的状况下k8s要推出Pod概念? 小葵花Pod课堂开课啦本文次要了解的一个外围点,什么是Pod?咱们先不关注Pod怎么应用,怎么调度,如何实现最佳实际。这些问题后续持续探讨,在不懂为什么k8s要有Pod的状况下,去先深究最佳实际没有实际意义。 囧么肥事-k8s专场 Pod官网定义Pod 是能够在 Kubernetes 中创立和治理的、最小的可部署的计算单元。 Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器 这些容器共享存储、网络、以及怎么运行这些容器的申明。 Pod 中的内容总是并置(colocated)的并且一起调度,在共享的上下文中运行。 Pod 所建模的是特定于利用的“逻辑主机”, 其中蕴含一个或多个利用容器, 这些容器是绝对严密的耦合在一起的。 Linux命名空间、cgroups*namespace* Linux namespace 提供了一种内核级别隔离系统资源的办法,通过将零碎的全局资源放在不同的namespace中来实现资源隔离的目标.Linux 中六类系统资源的隔离机制: ● Mount: 隔离文件系统挂载点 ● UTS: 隔离主机名和域名信息 ● IPC: 隔离过程间通信 ● PID: 隔离过程的 ID ● NetWork: 隔离网络资源 ● User: 隔离用户和用户组的 ID cgroups cgroups 限度一个过程组可能应用的资源下限,包含 CPU,内存,磁盘,网络带宽等,同时能够设置过程优先级,以及将过程挂起和复原等。 docker 角度了解PodPod 的共享上下文包含一组 Linux 名字空间、控制组(cgroup)和可能一些其余的隔离 方面,即用来隔离 Docker 容器的技术。 在 Pod 的上下文中,每个独立的利用可能会进一步施行隔离。 就 Docker 概念的术语而言,Pod 相似于共享名字空间和文件系统卷的一组 Docker 容器。 Pod 中多个容器如何协调?Pod 被设计成反对造成内聚服务单元的多个合作过程(模式为容器)。 ...

March 3, 2022 · 1 min · jiezi

关于kubernetes:记一次kubernetes-Evicted的处理

背景:事件这样的:kubernetes1.21.3集群。容器运行时containerd。除了K8s-node-06节点。保留这个docker节点有很多起因。比方过后没有想好用什么打包镜像。默认让jenkins打包镜像。还有就是我的gitlab 10.8.7版本contarinerd运行时下无奈启动。就保留了这个节点运行gitlab pod。当然了也把这个节点设置为了不可调度。不相其余利用调度到这个节点上来!最近一段时间gitlab利用频繁呈现Evicted的问题:这样就陷入了一个死循环:我的k8s-node-06设置为了不可调度,而后gitlab pod异样了 从新调度也调度不到节点上来....收到报错而后上线查找问题 解决问题过程:1. 首先将k8s-node-06节点设置为可调度使gitlab pod失常运行 [root@k8s-master-01 ~]# kubectl uncordon k8s-node-06node/k8s-node-06 uncordoned期待gitlab pod running 后 将k8s-node-06节点复原不可调度 [root@k8s-master-01 ~]# kubectl get pods -n kube-ops[root@k8s-master-01 ~]# kubectl cordon k8s-node-06node/k8s-node-06 cordoned[root@k8s-master-01 ~]# kubectl get nodes 2. describe Evicted pod 定位解决[root@k8s-master-01 ~]# kubectl describe pods gitlab-84d4998c96-b6z2j -n kube-ops注: pod名词不统一 疏忽。只是举个例子目测存储资源不够了?百度搜寻关键词:The node was low on resource: ephemeral-storage。参照:https://blog.csdn.net/u013355826/article/details/101020231。能够确定是存储资源有余了。登陆k8s-node-06节点通过查找文件发现Anchore Enine装置后,扫描后后数据文件太大造成的。就删除了anchore Engine中的扫描记录文件!察看一段事件后目测是失常了...... 3. 如何批量删除Evicted pod?而后pod 列表中还有好多Evicted pod 看着恨不悦目,怎么批量删除呢?如下: kubectl get pods --all-namespaces -o json | jq '.items[] | select(.status.reason!=null) | select(.status.reason | contains("Evicted")) | "kubectl delete pods \(.metadata.name) -n \(.metadata.namespace)"' | xargs -n 1 bash -c总结:做好资源的监控kubectl命令的熟练掌握,高效使用当然了最重要的还是解决问题的思路。先查看日志去定位问题!

March 2, 2022 · 1 min · jiezi

关于kubernetes:如何使用国内资源在-RKE2-上安装-Rancher-HA

作者简介袁振,SUSE Rancher 技术支持经理,负责订阅客户售后技术支持团队,为订阅客户提供技术支持服务。2016 年开始接触容器、Kubernetes 技术,对自动化运维、Devops、Kubernetes、prometheus 和其余云原生相干技术具备较深刻的钻研,对 SRE 运维体系建设、SRE 运维零碎架构设计有着丰盛的实践经验。 前 言Rancher 始终崇尚 “简略即美”,装置和应用都把简略施展得酣畅淋漓。但通过国内环境应用 Rancher 和 RKE2 可能会因为网络问题导致应用体验不佳: Rancher 和 RKE2 启动都依赖于容器镜像,在国内通过 dockerhub 拉取镜像有时会十分慢。RKE2 默认应用 github 资源装置脚本和二进制文件,国内难以下载。为了解决上述问题,Rancher 曾经把资源 mirror 到了国内,并提供给国内环境应用,本文将为大家介绍如何应用国内资源在 RKE2 上装置 Rancher HA。 环境形容操作系统:SUSE Linux Enterprise Server 15 SP3Kubernetes 发行版:RKE2 Kubernetes-v1.21.9+rke2r1Rancher 版本:2.6.3节点信息rancher2-6-node01 Server 节点(controller、etcd、worker)rancher2-6-node02 Server 节点(controller、etcd、worker)rancher2-6-node03 Server 节点(controller、etcd、worker)Helm 3.8.0部署 RKE2 Kubernetes 集群本章将介绍如何部署 RKE2 的高可用集群,用于 Rancher 2.6 版本的部署环境应用;Rancher 中国团队定时将 dockerhub 上的 RKE2 镜像同步到国内阿里云镜像仓库(registry.cn-hangzhou.aliyuncs.com),所以在国内装置 RKE2 举荐应用阿里云镜像仓库地址;RKE2 能够通过参数 system-default-registry 指定镜像仓库地址。创立第一个 server 节点通常状况下,RKE2 应用 /etc/rancher/rke2/config.yaml 文件作为默认配置文件。然而集群部署模式下,须要指定 server 地址、token 和 tls-san 参数,能够后行创立配置文件: mkdir -p /etc/rancher/rke2 ##创立目录vim /etc/rancher/rke2/config.yaml ##编辑配置文件token: rke2-create-token ##自定义tokentls-san: 172.16.200.1 ##tls-san参数system-default-registry: "registry.cn-hangzhou.aliyuncs.com" ##阿里云镜像库地址更多配置选项可查看官网文档,配置文件创立实现后,应用以下命令执行脚本装置 rke2-server,因为截止本文收回后的 Rancher 2.6.3 版本尚不反对在 kubernetes 1.22 版本上运行,因而这里应用 v1.21.9+rke2r1 的 kubernetes 版本: ...

March 2, 2022 · 3 min · jiezi

关于kubernetes:k8s初面考点ReplicaSet副本集极限9连击你懂了吗

k8s初面考点ReplicaSet正本集极限9连击你懂了吗?k8s考点灵魂拷问9连击 考点之简略形容一下k8s正本集ReplicaSet有什么作用?考点之为什么ReplicaSet将取代ReplicationController控制器?考点之编写 ReplicaSet 的 spec 有什么须要留神的点?考点之k8s集群中创立非模板 Pod 为什么可能会被正本集主动收纳?考点之线上预警k8s集群循环创立、删除Pod正本,始终无奈稳固指定指标正本数量?如果排除了是Pod外部产生了故障,从RS角度你猜想可能是什么起因?考点之标签Pod和可辨认标签正本集ReplicaSet 先后创立程序不同,会造成什么影响?考点之生产环境想要对某个Pod排错、数据恢复、故障复盘有什么方法?考点之缩放 RepliaSet 有哪些算法策略?考点之如何去影响淘汰策略,设置独自偏好? 囧么肥事-胡言乱语 考点之k8s正本集ReplicaSet有什么作用?ReplicaSet的次要作用是管制正本数量的,这里的每一个正本就是一个Pod,ReplicaSet它是用来确保咱们有指定数量的Pod正本正在运行的Kubernetes控制器,这里为了不便前面对立把ReplicaSet简称 RS。 进一步说什么是管制正本数量? RS确保Pod以你指定的正本数运行,即如果有容器异样退出,会主动创立新的 Pod 来代替,而异样多进去的容器也会主动回收。 假如k8s集群中,你想要运行10个Pod,如果这时候有4个Pod产生故障,异样退出,那么RS会主动创立新的4个Pod来代替产生故障的4个Pod。 RS尽力保障零碎以后正在运行的Pod数等于冀望状态里指定的Pod数目。 你想要10个,那么RS就尽可能保障在任何时候都给你提供10个,没有就创立,多了就删除。 总之,ReplicaSet 尽可能确保任何工夫都有指定数量的 Pod 正本在运行。 考点之为什么ReplicaSet将取代ReplicationController控制器?ReplicationController控制器(简称为RC)。 在之前旧版本的k8s中,应用的是RC控制器实现了k8s集群的高可用性,它跟当初的RS控制器作用相似,作用是,确保Pod以指定的正本数运行。 ReplicaSet继承了RC的性能,并实现了扩大,次要突出扩大是更弱小的标签抉择能力 ,即selector。 进一步说什么是标签抉择能力? ReplicaSet会通过标签选择器(Label-Selector)治理所有被打上与选择器匹配的标签的容器。 上面通过一段拟人对白,来了解什么是标签抉择: RS说:”嘿嘿,我要治理被打上 A,AA,AAA标签的Pod,都不许跑,听我指挥,排队站好,立正,向前看!“ Pod-001说:”我被打上了BBB标签,我才不归你管呢!“ Pod-002说:”我被打上了AA标签,快来接管我吧,我筹备好了“ Pod-003说:”呜呜,我想独立,我不想被RS管,我要做一个无拘无束的孩子,然而可怜的是,我被打上了A标签,RS给我管的紧紧的,我失去了自在,我好可怜呀“ ReplicationController本人也有标签抉择能力,然而它只能抉择蕴含某个标签的匹配Pod; ReplicaSet的选择器在根底上减少了容许匹配短少某个标签的pod,或蕴含特定标签名的Pod; 举个例子 两组Pod,env标签别离是production和devel Pod-A env=production Pod-B env=devel RC 只能匹配其中的Pod-A或者Pod-B中的一个; RS 则能够同时能够匹配并将它们视为一个大组,无论标签env的值具体是什么(env=*),都能够标签名来进行匹配; 考点之编写 ReplicaSet 的 spec 有什么须要留神的点?相似其余Kubernetes API 对象,RS也须要指定 apiVersion、kind、和 metadata 字段。 对于 ReplicaSets 而言,其 kind 始终是 ReplicaSet。ReplicaSet 对象的名称必须是非法的 DNS 子域名属性.spec.template 是一个Pod 模版, 要求设置标签,留神不要将标签与其余控制器的标签选择器重叠属性.spec.template.spec.restartPolicy 指定模板的重启策略 ,容许的取值是 Always属性.spec.selector 字段是一个标签选择器 用来筛选匹配标签的Pod归属在 ReplicaSet 中,.spec.template.metadata.labels 的值必须与 spec.selector 值 相匹配,否则该配置会被 API 回绝。考点之k8s集群中创立非模板 Pod 为什么可能会被正本集主动收纳?后面提到了,RS采纳了最新的标签抉择能力,通过指定.spec.selector标签选择器,不仅可依据标签值,甚至连标签名统一都能够进行匹配。 ...

March 2, 2022 · 1 min · jiezi

关于kubernetes:在k3s上部署第一个nginx服务

创立Deployment在 kubernetes 中,deployment 用来部署利用,常见的集中配置含意如下 nginx-deployment.yml apiVersion: apps/v1 #与k8s集群版本无关,应用 kubectl api-versions 即可查看以后集群反对的版本kind: Deployment #该配置的类型,咱们应用的是 Deploymentmetadata: #译名为元数据,即 Deployment 的一些根本属性和信息 name: nginx-deployment #Deployment 的名称 labels: #标签,能够灵便定位一个或多个资源,其中key和value均可自定义,能够定义多组,目前不须要了解 app: nginx #为该Deployment设置key为app,value为nginx的标签spec: #这是对于该Deployment的形容,能够了解为你期待该Deployment在k8s中如何应用 replicas: 3 #应用该Deployment创立一个应用程序实例 selector: #标签选择器,与下面的标签独特作用,目前不须要了解 matchLabels: #抉择蕴含标签app:nginx的资源 app: nginx template: #这是抉择或创立的Pod的模板 metadata: #Pod的元数据 labels: #Pod的标签,下面的selector即抉择蕴含标签app:nginx的Pod app: nginx spec: #冀望Pod实现的性能(即在pod中部署) containers: #生成container,与docker中的container是同一种 - name: nginx #container的名称 image: nginx:alpine #应用镜像nginx创立container, ports: - containerPort: 80 #外部服务裸露的端口这外面定义nginx应用的镜像和创立多少个实例,以及container命名标记 当咱们依照须要配置好deployment,应用kubectl apply 去创立部署(常见的几个 kubectl 命令可能须要记一下) [root@master nginx]# kubectl apply -f nginx-deployment.yml deployment.apps/nginx-deployment created ...

March 1, 2022 · 1 min · jiezi

关于kubernetes:比特熊故事汇2月MVP英雄故事|有爱的开源

爱吃、爱玩、更爱学习技术,IT界的新晋网红,开发者的好敌人—比特熊又跟大家见面啦! 两个月一眨眼,《鬼灭之刃 游郭篇》完结了,本熊真是意犹未尽啊! 比特熊:2月份的直播的日子2月22日很非凡,还恰好是个星期二,这个日子真的爱意满满。我在这个特地有爱的日子请到了酷爱开源也和本熊一样喜爱电影的两位嘉宾——陈阳、张晋涛! 【比特熊故事汇】作为比特熊直播间的重要栏目,定期请来技术大牛和行业先锋做客。这里不仅讲最“热”的技术,还有更多待解锁的集体故事和趣味话题!请继续关注,更激励大家举荐你想意识的“英雄”。欢送大家来到直播间,跟比特熊一起,与专家们零距离畅聊。 陈阳:我挺喜爱看电影的,不论是新电影还是老片子,刚过去的春节档有一部电影我很关注——《小虎墩大英雄》。因为在虎墩这个IP上面,咱们也做了虎墩的虚构数字人,虎墩不仅亮相大银幕,还上了春晚!对于虎墩,除了他这些很厉害的身份,还有他的“技能”也会分享给大家。 张晋涛:我比拟喜爱看动漫,电影也是动画电影看得比拟多。我很喜爱《功夫熊猫》,我和阿宝有一些相似的特质,都会继续去做一些事件,有了指标之后,会源源不断地付出致力。这和咱们做开源是一样的,很多事件是源自趣味,但越到前期越须要恒心和毅力,只有这样最终能力达成预期。 陈阳:晋涛你肯定也会喜爱小虎墩,虎墩讲的就是一个小孩如何坚定不移、克服万难,最初成为一名真正的镖师的故事,和《功夫熊猫》有一些类似的中央。 比特熊:看起来两位在电影中都有本人心中的英雄啦。但两位老师另一个要害身份是技术专家!据本熊截获的线报,张晋涛老师的技术长项是 Kubernetes。比特熊心愿理解一下它的前世今生。 张晋涛:Kubernetes 实际上是用来做容器编排的,容器相似集装箱,是装各种货色的货色。容器技术最早能够追溯到上世纪90年代,但容器是近几年才火起来的。到2008年的时候,曾经有了一些绝对成熟的技术,比方LXC。既然早就有容器技术,然而为什么从2008年始终到2013年(Docker 正式开源),都没有太多的人去聊容器化,甚至都没有人去关注容器畛域到底产生了什么事件?次要是因为 LXC 学习老本有点高,然而为什么 Docker 在2013年开源之后,火爆了技术圈,无论是国内国外,都在迅速地尝试 Docker……次要因为 Docker 这项技术它除了带来容器以外,它还带来了另外一项十分要害的技术——Docker 镜像,它实际上是一种打包格局,或者说是一种利用交付格局。从此软件的交付模式产生了天翻地覆的变动,原先咱们的交付形式可能是间接交付源代码,有可能是间接交付二进制,然而自从 Docker 引入了容器镜像这个概念之后,从2013年开始,咱们就开始交付容器镜像了…… 咱们会发现任何一个开源软件或者开源我的项目,只有它在交付本人的产品,你就会发现他都会抉择在到 Docker Hub 下面去托管一份本人的镜像……Docker 带来了两个能真正解放咱们生产力的概念,交付容器镜像的时候,会把咱们的应用程序加上咱们的应用程序的运行环境同时打包到了同一个容器镜像中,它能够解决程序员的一个最大痛点:为什么在我的电脑上能够运行,在你的电脑上运行不了?就是环境不同。 比特熊总结了一下,张晋涛老师给咱们介绍的 Kubernetes 简史。 2014,Google 推出了 Kubernetes。因为当初的软件架构都要求咱们去做分布式、微服务,单纯的一个单机版软件及单机版的根底软件,无奈满足咱们的生产环境的这种需要。 2015年, Docker 将本人底层的容器运行时拆分进去了,Docker 这家公司在开源上比拟胜利,但在商业上却比拟失败。他把本人的容器镜像的格局和标准也捐给了OCI。既然你的标准曾经开源进去了,那么其他人只有恪守这个标准,就能够做对应的产品。 陈阳:Docker 凋谢了本人的规范,反而助长了本人的竞品。 张晋涛:是这个状况。 2016年,整个社区都感觉保护老本太高了,心愿咱们也推出一种标准,叫做 CRI——容器运行时接口。 2017年,Docker 背地的这家商业公司,把 Docker 这个我的项目的名字改成了Moby(白鲸)。然而在大家心中,Docker 这项技术它曾经不仅仅代表着 Docker 本身,不仅仅代表着容器技术了,它是一整个生态圈。 而 Cotainerd 的活跃度、贡献者逐步超过了 Docker 本身。Docker 这个我的项目当初的贡献者在拆分之前 Github 上有2000多个,我排六十几。依据这个我的项目的统计信息,前100名在很长一段时间内都没有变动,其他人很难进入到这前100名。而在比拟沉闷的我的项目,你会发现随着一个人的奉献减少,他的排名会逐渐减少,毕竟 GitHub 的排行榜只能看到前100名。 2020年,K8s 将代码仓库中的 Dockershim 移除了,因为当初容器运行时的抉择更多了,它不再须要只拥抱这一个了。 ...

March 1, 2022 · 1 min · jiezi

关于kubernetes:如何使用-Rancher-Desktop-访问-Traefik-Proxy-仪表板

Adrian Goins 最近举办了对于如何应用 K3s 和 Traefik 爱护和管制边缘的 Kubernetes 巨匠班,演示了如何拜访 K3s 的 Traefik Proxy 仪表板,能够通过以下路径注册观看回放:https://more.suse.com/MC_Secu... Desktop 创立了一个单节点 K3s 集群,我十分好奇在应用 Rancher Desktop 时,是否能够拜访 Traefik Proxy 仪表板。我在 Adrian 的课程上提出了这个问题,他说应该能够,于是我便开始着手操作。 留神:本文应用的环境为 Linux 操作系统,如 Mac 或 Windows 需视状况调整参数。 本文参考了 Adrian 在 GitHub 上公布的一些课程: https://github.com/traefik-wo... 首先,克隆 Adrian 的 repo: > git clone https://github.com/traefik-workshops/k3s-and-traefik-proxy.git> cd k3s-and-traefik-proxy/第一课: 裸露 Traefik 仪表盘留神:01-Expose-the-Dashboard 中的所有文件目前都没有在 Adrian 的课程中应用。将集群 IP 设置为变量Adrian 倡议查看 kubeconfig 文件中的集群 IP 地址,Rancher Desktop 会在主机上创立一个 ~/.kube/config 文件: > grep server ~/.kube/configserver: https://127.0.0.1:6443> export CLUSTERIP=127.0.0.1此时,Adrian 持续他的课程,但目前 Linux 上的 Rancher Desktop 存在一个问题:特权端口(低于 1024 的端口)无法访问。请参考 https://github.com/rancher-sa... ...

March 1, 2022 · 4 min · jiezi

关于kubernetes:二进制安装Kubernetes一键安装脚本

背景,最近几天闲着钻研Kubernetes,发现应用手动二进制装置会有些繁琐。通过突发奇想,就呈现这个脚本。 申明,该脚本不迭互联网上其余大佬的一件脚本,该脚本仅仅是突发奇想编写的,心愿大佬不喜勿喷。 这个脚本执行环境比拟刻薄,我写的这个脚本比拟垃圾,还未能达到各种环境下都能够执行。 以后脚本Kubernetes集群,以及lb负载平衡,须要在CentOS零碎,执行脚本节点能够抉择Ubuntu或者CentOS零碎。 以后脚本中援用的Kubernetes二进制包是v1.23.3 主机名称IP地址阐明软件Master01192.168.1.40master节点kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、nfs-clientMaster02192.168.1.41master节点kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、nfs-clientMaster03192.168.1.42master节点kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、nfs-clientNode01192.168.1.43node节点kubelet、kube-proxy、nfs-clientNode02192.168.1.44node节点kubelet、kube-proxy、nfs-clientLb01192.168.1.45node节点kubelet、kube-proxy、nfs-clientLb02192.168.1.46node节点kubelet、kube-proxy、nfs-client 192.168.1.55vip cby192.168.1.60执行脚本节点bash作者:陈步云 微信:15648907522 我的项目地址:https://github.com/cby-chen/B...\_installation\_of\_Kubernetes 应用阐明: 该脚本须要八台服务器,在八台服务器中有一台是用于执行该脚本的,另外有五台k8s服务器,其余俩台作为lb负载平衡服务器。 将其中七台服务器配置好动态IP,批改如下变量中的IP即可。 同时查看服务器中的网卡名,并将其批改。 执行脚本可应用bash -x 即可显示执行中详细信息。 该脚本临时不反对自定义k8s构造,须要严格执行该构造。 脚本中是须要在GitHub上下载软件包能够手动提前下载好wget https://github.com/cby-chen/Kubernetes/releases/download/cby/Kubernetes.tar下载脚本wget https://www.oiox.cn/Binary_installation_of_Kubernetes.sh批改参数vim Binary_installation_of_Kubernetes.sh如下:#每个节点的IP,以及vipexport k8s_master01="192.168.1.40"export k8s_master02="192.168.1.41"export k8s_master03="192.168.1.42"export k8s_node01="192.168.1.43"export k8s_node02="192.168.1.44"export lb_01="192.168.1.45"export lb_02="192.168.1.46"export lb_vip="192.168.1.55"#物理网络ip地址段,留神反斜杠转译export ip_segment="192.168.1.0\/24"#k8s自定义域名export domain="x.oiox.cn"#服务器网卡名export eth="ens18"执行脚本bash -x Binary_installation_of_Kubernetes.shhttps://www.oiox.cn/https://www.chenby.cn/https://cby-chen.github.io/https://weibo.com/u/5982474121https://blog.csdn.net/qq_3392...https://my.oschina.net/u/3981543https://www.zhihu.com/people/...https://segmentfault.com/u/hp...https://juejin.cn/user/331578...https://space.bilibili.com/35...https://cloud.tencent.com/dev...https://www.jianshu.com/u/0f8...https://www.toutiao.com/c/use...CSDN、GitHub、知乎、开源中国、思否、掘金、简书、腾讯云、哔哩哔哩、今日头条、新浪微博、集体博客、全网可搜《小陈运维》

March 1, 2022 · 1 min · jiezi

关于kubernetes:Gopher转Rust辣眼睛语法排行榜

Gopher转Rust辣眼睛语法排行榜作者:中弈 - sealos作者,sealer发起人 TOP 10 常常遗记写的分号fn add_with_extra(x: i32, y: i32) -> i32 { let x = x + 1; // 语句 let y = y + 5; // 语句 x + y // 表达式}当你是从golang刚转过来,你肯定常常遗记写分号, 对于 Rust 语言而言,这种基于语句和表达式的形式是十分重要,而且很多时候有了表达式会很不便,比方不必再写return,或者在匹配的时候应用。 语句执行一些操作无返回值,表达式会求值后返回一个值,所以分号‘;’就很重要了。 TOP 9 感叹号fn main() { println!("hello world"); }这是什么鬼,为什么println前面要加个感叹号,是叫我别打印嘛?其实这是go外面没有的宏,宏能够干很多函数无能为力的事,在很多状况下也十分不便。比方元编程,可变参数,为指定的类型实现某个特色等,而且编译之前就做好了开展。其本质是生成(替换)一些代码,让咱们少写代码。 TOP 8 &str String::from("傻傻散布分明")怎么整个字符串这么麻烦。。。 let s = "hello";s是被硬编码进程序的,大小固定在栈区内存调配,类型为&str. let s = String::from("hello");s.push_str(",world!");s大小不可晓得,调配在堆上,类型为String. TOP 7 援用借用惯例的援用是一个指针类型,指向了对象存储的内存地址。借用:获取变量的援用。 let x = 5;let y = &x;这里y就是x的援用。援用的时候变量的所有权(一夫一妻)不会产生转移,援用=(出轨)。 fn main() { let s1 = String::from("hello"); let len = calculate_length(&s1); println!("The length of '{}' is {}.", s1, len);}fn calculate_length(s: &String) -> usize { s.len()} ...

February 28, 2022 · 3 min · jiezi

关于kubernetes:针对-Kubernetes-v122阿里云容器服务-ACK-提供了哪些升级和增强能力

作者:ACK 1.22 版本是 Kubernetes 在 2021 年推出的第二个版本,该版本蕴含 53 项加强性能,被 Kubernetes 开发团队和社区认为将 Kubernetes 带到了新的顶峰。 作为寰球首批通过 Kubernetes 一致性认证的容器服务,阿里云容器服务 Kubernetes 版(ACK)始终严格遵循社区一致性,并及时针对新版本提供组件的降级、优化和更多加强能力,以确保为用户提供可信赖的无缝原生化和稳固服务。上面就让咱们一起疾速通过这份 FAQ,初步理解针对 Kubernetes v1.22,ACK 提供了哪些降级和加强能力吧,赶快珍藏起来! 如果你想理解 ACK 针对 Kubernetes 1.22 版本所做的残缺变更,点击文末浏览原文即可取得。 FAQ【Q1】Kubernetes 1.22 引入了哪些新个性?【A1】引入的新个性包含: 长久卷(PersistentVolume)衰弱度监控(Health Monitor)个性基于 cgroups v2 实现内存资源的服务质量(Quality of Service)保障个性基于主机过程容器(HostProcess containers)实现 Windows 特权(Privileged)容器的个性工作负载(Workload)可应用节点替换内存个性(仅反对 Linux 节点)为工作负载配置默认 seccomp 配置个性(仅反对 Linux 节点)【Q2】针对 Kubernetes 1.22 版本,ACK 对哪些组件进行了降级和优化?【A2】此次 ACK 降级和优化的外围组件包含 Kubernetes,etcd,CoreDNS,CRI,CSI,CNI,NVIDIA Container Runtime,Ingress Controller 【Q3】ACK 针对 Kubernetes 1.22 版本提供了哪些新的加强能力?【A3】提供加强能力包含: 可观测性 丰盛了 APIServer 进行拜访申请的指标信息,进步 APIServer 的可观测性。对于 ACK Pro 版、ASK Pro 版或边缘 Pro 版集群,可透出托管面组件的外围指标,进步托管面核心部件的可观测性。稳定性 ...

February 24, 2022 · 1 min · jiezi

关于kubernetes:一文了解如何源码编译Rainbond基础组件

Rainbond 次要由以下三个我的项目组成,参考官网具体 技术架构 业务端 Rainbond-UI 和 Rainbond-Console 合起来形成了业务层。业务层是前后端拆散模式。UI是业务层的前端代码,Console是业务层的后端代码。Rainbond-UI https://github.com/goodrain/r... Rainbond-Console https://github.com/goodrain/r... 集群端 Rainbond 是平台集群端的实现,次要与 Kubernetes 集群进行交互。Rainbond https://github.com/goodrain/r... 编译我的项目留神:须要装置 docker 环境业务层源码编译编译前端Rainbond-UI镜像 首先将 Rainbond-UI 我的项目克隆到本地git clone https://github.com/goodrain/rainbond-ui.git应用我的项目根目录下的 build.sh 脚本构建镜像:VERSION=v5.5.0-release ./build.shVERSION 指定构建完镜像的 tag,前端打包出的镜像将作为后端代码的根底镜像。 编译后端Rainbond-console镜像 首先将 Rainbond-console 我的项目克隆到本地git clone https://github.com/goodrain/rainbond-console.git应用我的项目根目录下的 release.sh 脚本构建镜像:VERSION=v5.5.0-release ./release.sh allinoneVERSION 指定构建完镜像的 tag,因为前端代码的镜像为根底镜像,因而该处应与前端我的项目的 tag 保持一致。请应用如下命令将前后端代码编译在一起,造成最终可间接运行的 allinone 镜像。 运行业务层镜像 当编译实现 allinone 镜像后,你能够参考如下命令,将最初一行的镜像名替换为你打包的镜像名后,运行该镜像。 docker run -d -p 7070:7070 \--name=rainbond-allinone --restart=always \-v ~/.ssh:/root/.ssh \-v ~/rainbonddata:/app/data \rainbond/rainbond:v5.5.0-release-allinone镜像运行起来后,拜访机器的 7070 端口,即可进入 Rainbond 控制台。 集群端源码编译集群端是部署在 Kubernetes 集群上的,同时组件比拟多,因而能够依据须要编译单个组件。 ...

February 23, 2022 · 2 min · jiezi

关于kubernetes:K8S-生态周报-Istio-即将发布重大安全更新多个版本受影响

「K8S 生态周报」内容次要蕴含我所接触到的 K8S 生态相干的每周值得举荐的一些信息。欢送订阅知乎专栏「k8s生态」。Istio 行将公布重大安全更新,多个版本受影响Istio 产品安全工作组近期发现 Istio 中存在一些安全漏洞,其中 最高级别的破绽被评级为高严重性。鉴于以后 Istio 的破绽披露政策,所以目前咱们不会走漏具体的破绽细节。 在一周后的 2 月 22 日,将会公布 Istio v1.11.7、v1.12.3 和 v1.13.1 版本修改这些安全漏洞。届时会再更新破绽的具体内容。 请参考官网通告 此外,本周 Istio 也公布了 v1.13.0 正式版, 在 v1.13.1 版本公布前,我不倡议大家将本人所用的 Istio 降级到 v1.13.0 。 尽管不倡议当初降级,但咱们也能够关注下 v1.13.0 带来的一些值得关注的变更: v1.13.0 版本中为东西向流量提供了基于主机名的多网络网关反对。主机名能够在管制面中被解析,解析记录可被用作 endpoint。如果你不须要这个行为,或者想要复原到之前版本中的默认行为,能够为 istiod 增加 RESOLVE_HOSTNAME_GATEWAYS=false 的配置。 此外,它还反对重写 gRPC 探针,以及通过 proxyMetadata 提供了在 Envoy 工作线程间的重均衡,并且通过学习 Kubernetes 的探测行为,改善了 istio-agent 健康检查的探测,这样它就不会再重用连贯了。请参考 #36390 。 同时咱们会发现在这个版本中它对 Telemetry API 的反对减少了不少,尤其是它为 access log 反对了Common Expression Language (CEL) filter 。如果你感觉对 CEL 有些生疏,那么你能够看下我之前的文章 《K8S 生态周报| Kubernetes v1.23.0 正式公布,新个性一览》 ,其中就介绍到了在 Kubernetes v1.23 中对 CEL 的反对。(这样看起来 CEL 的储备很正确) ...

February 16, 2022 · 2 min · jiezi

关于kubernetes:Kubernetes使用云溪数据库简介

为什么抉择 Kubernetes 容器是打包和运行应用程序的好形式。在生产环境中,咱们须要治理运行应用程序的容器,并确保不会停机。如果一个容器产生故障,则须要启动另一个容器。如果零碎解决此行为,会不会更便捷?这就是 Kubernetes(后文简称K8s) 的价值所在,它为你提供了一个可弹性运行分布式系统的框架。K8s 用于治理容器化的工作负载和服务,可促成申明式配置和自动化。 同时,k8s 为你提供了主动部署和回滚、服务发现和负载平衡、存储编排、自我修复、密钥与配置管理等很多性能。即便有一些对于 k8s 复杂性的埋怨,咱们依然深信它带来的好处远大于复杂性老本。 Kubernetes 如何保护利用状态 Kubernetes 在其晚期阶段次要针对无状态应用程序(不治理本人的持久性数据的应用程序),这一个性直到 k8s 引入了 persistent volumes(长久卷)和 StatefulSet 后失去了晋升。通常,当 Kubernetes 容器死亡时,它将被具备新标识(包含新IP地址和主机名)的新容器替换。然而,StatefulSet性能可确保每个 Pod 具备本人的稳固身份(可通过DNS解析),无论它被重启了多少次。这对云溪数据库(云溪数据库)很有用,因为这意味着每次更换或重启 Pod 时,咱们不用将其视为集群中的新节点,也防止了大量数据复制。这对于反对 云溪数据库的共识协定和分布式事务十分重要。作为云原生数据库,云溪数据库能够容忍失落单个数据节点的数据失落,它能检测到集群中缺失的正本,并主动增加新正本。出于升高提早的思考,咱们举荐您应用本地磁盘作为存储,尽管近程存储容许正本在不失落数据的状况下挪动。 为什么在 Kubernetes 上应用云溪数据库 少数状况下,在 K8s 上部署、运维云溪数据库比在物理机或虚拟机上更不便。这次要因为 云溪数据库是单个可执行文件,可通过每个节点提供到数据库的通用网关。每个节点都是全对等的,惟一的区别是该节点治理的是哪局部数据。当遇到间歇性故障或进行滚动降级时, K8s 助力于数据库集群的疾速复原。只管 K8s 带来许多诸多的便当,咱们依然要衡量 k8s 带给咱们的弹性与通过物理机或虚拟机取得更高性能的利弊。即便在物理机或虚拟机上保护数据库须要更多的人工操作,但取得的最佳性能比 k8s 上要好。 云溪数据库如何运行在 Kubernetes 上 一、创立数据库集群1.如果您没有应用网络存储而是本地存储卷时,须要创立3个 persistent volumes(长久卷)来提供给 pod 应用: $ kubectl apply -f pv0.yaml -f pv1.yaml -f pv2.yaml可参考以下的长久卷(pv)yaml文件: apiVersion: v1kind: PersistentVolumemetadata: name: pv-bini-0 labels: app: binispec: capacity: storage: 10Gi volumeMode: Filesystem accessModes: - ReadWriteOnce storageClassName: local persistentVolumeReclaimPolicy: Retain local: path: /home/inspur/pv/pv0 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: ['slave1']2.在筹备好 Kubernetes 的环境后,您能够应用 yaml 文件去创立 StatefulSet 来创立数据库集群: ...

February 11, 2022 · 3 min · jiezi

关于kubernetes:趁着同事玩游戏偷偷认识k8s一家子补补课

趁着共事玩游戏偷偷意识k8s一家子补补课 Kubernetes集群这个小家庭在容器化时代可能新军崛起,要感激其泛滥牢靠稳固,工作认真负责的优质成员。 这些兄弟姐妹们为集群提供故障转移和高可用性,保障k8s 能够跨多主机运行,集群跨多个节点运行。 k8s兄弟姐妹先进入k8s组件成员学习探讨环节 k8s家庭成员 一个k8s集群由master节点和worker节点组成。看看k8s官网组件图: Master Node:是集群的控制中心、网关和中枢枢纽,是k8s家庭里的大家长,次要作用:裸露API接口,跟踪其余服务器的衰弱状态、以最优形式调度负载,以及编排其余组件之间的通信。单个的Master节点能够实现所有的性能,生产环境中须要部署多个Master节点,组成Cluster,防止单点故障问题带来的服务生效和数据失落。Worker Node:工作节点,听从大家长指令,脚踏实地的创立和销毁Pod对象,调整网络规定进行正当路由和流量转发。生产环境中,Worker Node节点能够有N个。 《k8s-企业级容器利用托管》- 继续更新 第一段:意识k8s是什么?举荐浏览:《云原生新时代弄潮儿k8s凭什么在容器化方面自成一家?》 第二段:意识k8s家庭成员?举荐浏览:《趁着共事玩游戏偷偷意识k8s一家子补补课》 第三段:待更新?举荐休闲浏览:《囧么肥事》

February 10, 2022 · 1 min · jiezi

关于kubernetes:2022对看到的第一篇不爽的文章的吐槽

背景:微信关注了很多的技术公众号,早上醒来看各位大佬剖析的文章是集体的习惯。尽管忘了很多公众号是怎么关注的了......早上偶尔看到一篇分享文章:以后 Kubernetes 发行版比拟,忍不住想要吐槽一把。这写的是啥玩意?也好意思分享? 开始吐槽:1. 看文章这写作形式有点像是僵硬翻译的国外文档? yes or no? yes如果是:请注明出处,因为我感觉很多中央读起来很是不通顺,想看一下原文。另外表注出处是对原作者的尊重! no如果不是。那文章的深度显然不够,因为只列举了国外的几个大的厂商的kubernetes服务,并没有拿国内的华为 阿里 腾讯的产品作比拟。没有援用国内产品也是为狐疑僵硬翻译国外文章的次要起因! 2. 对于kubernetes发行版的分类集体比拟同意的对于kubernetes发行版的分类:“纯”发行版:这些是提供预构建 Kubernetes 和仅预构建 Kubernetes 的平台。在大多数状况下,他们让用户抉择应用哪些其余技术来构建残缺的容器化应用程序堆栈。从这个意义上说,这些是“最纯正的”Kubernetes 发行版。Canonical Kubernetes 和 Kontena Pharos 就是此类别的示例。“Plus”发行版:这些就是我所说的“Kubernetes plus”发行版。我的意思是指将 Kubernetes 与其余特定技术(例如某些容器运行时、主机操作系统或管制立体附加组件)集成的平台。这些是 Kubernetes 发行版,因为它们蕴含 Kubernetes,但它们并没有为您提供该技术的纯上游版本或以您想要的任何形式设置它的灵活性。OpenShift 和 Rancher(这两个都是晚期基本不包含 Kubernetes 的宽泛平台)就是例子。Kubernetes 即服务:如果您应用托管服务在云中运行 Kubernetes,您实际上是在应用云供应商提供的发行版。这些发行版为用户提供了起码的控制权。然而您只需点击几下即可启动并运行,那么谁在埋怨呢?Azure AKS、AWS EKS 和 Google GKE 是此类 Kubernetes 即服务散布的显著示例。无限用处的发行版:最初一类包含那些用于特定和无限用处的发行版(或应用 Kubernetes 构建的平台)。MicroK8s 和 K3s 等单节点、“轻量级”Kubernetes 发行版就是示例。(能够说)KubeVirt 也是如此,这是一个应用 Kubernetes 来编排虚拟机而不是容器的平台。注:摘自https://blog.csdn.net/allway2/article/details/121690463集体感觉这个的分类是很好的 3. 文章中各种诡异的中英文搭配翻译不晓得国人为什么喜爱把一组好好的英文翻译成中英文组合的怪异组合? Docker Kubernetes Service吧? 为什么Docker Kubernetes 服务?DKS加个备注也挺好 OpenShift Kubernetes engine  ?为什么弄个OpenShift Kubernetes 引擎?GKE非的稿个谷歌 Kubernetes 引擎_Rancher_ Kubernetes Engine 依照你的翻译 应该三 rancker kubernetes引擎吧怎么搞一个Rancher Kubernetes 服务?RKE他不香吗?最可恶的是后面都是云商的kubernetes即服务。为什么上面的题目是微软 Azure ?亚马逊网络服务 (AWS)?不应该是对应的kubernetes服务吗?好歹也是Azure AKS、AWS EKS 的全程半吊子翻译吧?Oracle Kubernetes 引擎 你还不如Oracle Kubernetes Engine 后记评论问了一下作者,确认了是翻译过去的。找到了原文连贯:https://dzone.com/articles/a-comparison-of-current-kubernetes-distributions那只能吐槽一下关键词中英文组合的形式有问题。另外要吐槽一下:并不是外国人写的文章就是好的!起码这篇文章写的不咋样......忍不住在dzone注册个账号用google翻译中文吐槽了一下:I accidentally saw the Chinese translation of this article and couldn't help but be surprised,Classification of kubernetes distributions: ...

February 9, 2022 · 2 min · jiezi

关于kubernetes:eks使用efs-dynamic-provisioning-创建非root容器提示Operation-not-permitted

作者:SRE运维博客博客地址:https://www.cnsre.cn/ 文章地址:https://www.cnsre.cn/posts/220125450139/相干话题:https://www.cnsre.cn/tags/eks/前言之前在 aws 中创立了 eks,在数据存储这一块中,我抉择了应用 AWS 的 EFS 具体部署配置参考Amazon EKS 中 EFS 持久性存储。文章中的动静供应是 AWS 官网给的示例,应用的是root用户启动的容器。在我前面的测试中发现,我在应用非root用户启动容器的时候,发现应用动态供应是有权限并且没有报错的。然而在应用静载供应的时候呈现了 Operation not permitted 的报错。 问题形容我依据efs dynamic_provisioning 创立了 dynamic provisioning root用户的容器运行没有问题,然而非root用户容器运行时提醒 “Operation not permitted” pod配置清单: apiVersion: v1kind: Servicemetadata: name: wordpress-mysql labels: app: wordpressspec: ports: - port: 3306 selector: app: wordpress tier: mysql clusterIP: None---apiVersion: v1kind: PersistentVolumeClaimmetadata: name: mysql-pv-claim labels: app: wordpressspec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi---apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2kind: Deploymentmetadata: name: wordpress-mysql labels: app: wordpressspec: selector: matchLabels: app: wordpress tier: mysql strategy: type: Recreate template: metadata: labels: app: wordpress tier: mysql spec: containers: - image: mysql:5.6 name: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claimStorageClass配置清单: ...

February 9, 2022 · 3 min · jiezi

关于kubernetes:蚂蚁大规模-Kubernetes-集群无损升级实践指南探索篇

文|王连平(花名:烨川 ) 蚂蚁团体高级开发工程师 负责蚂蚁 Kubernetes 集群容器交付,专一于集群交付能力、交付性能及交付 Trace 等相干畛域 本文 12623 字 浏览 20 分钟 —— 庖丁解牛,让降级不再懊恼 PART. 1 背 景蚂蚁 Sigma 作为蚂蚁团体外围的基础设施,通过多年的倒退其规模曾经处于业界当先地位,大规模集群对 Kubernetes 的稳定性及功能性提出更高的要求。蚂蚁 Sigma 力争在万级规模的云原生环境下,挑战高效稳固、无损无感的云原生操作系统降级,给用户带来极致稳固的、性能新鲜的云原生服务。 为什么要继续迭代降级 ?Kubernetes 社区的活跃度十分高,泛滥的云原生爱好者为社区奉献智慧,推动社区版本不断更新。降级是为了紧跟社区的步调,及时享受社区积淀下来的优良个性,进而给公司带来更大利益。 为什么降级那么难 ?依照蚂蚁 Sigma 的规模,降级对咱们来讲是一件十分不容易的事件,次要体现在: 在降级筹备阶段,要全量推动客户端进行降级,业务方要安顿专门的人投入进来,耗时耗力;在降级过程中,为了躲避版本滚动时对 Kubernetes 资源操作可能带的来不可预期结果,降级过程中个别会关停流量,业务体感不好;对于降级工夫窗口抉择,为了给用户更好的服务体验,降级要放到业务量少的工夫进行,这对平台运维人员不太敌对。因而,降级过程中如何晋升用户、研发、SRE 的幸福感是咱们想要达成的指标。咱们冀望实现无损降级来升高降级危险,解耦用户来晋升幸福感,高效迭代来提供更弱小的平台能力,最终实现无人值守。 本文将联合蚂蚁 Sigma 系统升级实际,从 Kubernetes 系统升级的指标、挑战开始,逐渐分析相干的 Kubernetes 常识,针对这些挑战给出蚂蚁 Sigma 的一些准则和思考。 【两种不同的降级思路】在介绍挑战和收益前,咱们先理解下以后集群降级的形式。Kubernetes 降级与一般软件降级相似,次要有以下两种常见的降级形式:替换降级和原地降级。 替换降级:将利用运行的环境切换到新版本,将旧版本服务下线,即实现替换。在 Kubernetes 降级中,即降级前创立新版本的 Kubernetes 集群,将利用迁徙到新的 Kubernetes 集群中,而后将旧版本集群下线。当然,这种替换降级能够从不同粒度替换,从集群为度则是切换集群;从节点维度,则管控节点组件独自降级后,kubelet 节点降级时迁徙节点上的 Pod 到新版本节点,下线旧版本节点。原地降级:将降级的软件包原地替换,旧服务过程进行,用新的软件包从新运行服务。在 Kubernetes 降级中,apiserver 和 kubelet 采纳原地软件包更新,而后重启服务,这种形式与替换降级最大的区别在于节点上的 workload 不必迁徙,利用不必中断,放弃业务的连续性。上述两种形式各有优缺点,蚂蚁 Sigma 采纳的是原地降级。 【方法论-庖丁解牛】采纳原地降级时也必然会遇到原地降级的问题,其中最次要问题就是兼容性问题,次要蕴含两个方面:Kubernetes API 和组件外部的管制逻辑兼容性。 ...

February 8, 2022 · 5 min · jiezi

关于kubernetes:iLogtail-与Filebeat-性能对比

简介:前段时间, iLogtail 阿里千万实例可观测采集器开源,其中介绍了iLogtail采集性能能够达到单核100MB/s,相比开源采集Agent有5-10倍性能劣势。很多小伙伴好奇iLogtail具体的性能数据和资源耗费如何,本文将针对目前业界应用度较高且性能绝对较优的Agent FileBeat进行比照,测试这两个Agent在不同压力场景下的体现如何。 作者 | 少旋起源 | 阿里技术公众号 一 前言前段时间, iLogtail [1]阿里千万实例可观测采集器开源,其中介绍了iLogtail采集性能能够达到单核100MB/s,相比开源采集Agent有5-10倍性能劣势。很多小伙伴好奇iLogtail具体的性能数据和资源耗费如何,本文将针对目前业界应用度较高且性能绝对较优的Agent FileBeat进行比照,测试这两个Agent在不同压力场景下的体现如何。 二 测试试验形容随着Kubernetes 遍及,Kubernetes 下的日志收集的需要也日益常态化,因而下文将别离进行容器规范输入流采集与容器内动态文件采集比照试验(应用动态文件采集的小伙伴能够参考容器内动态文件采集比照试验, iLogtail 纯动态文件采集会略优于试验2容器内文件动态采集),试验项具体如下: 试验1:恒定采集配置4,Filebeat & iLogtail 在原始日志产生速率 1M/s、2M/s、 3M/s 下的规范输入流采集性能比照。试验2:恒定采集配置4,Filebeat & iLogtail 在原始日志产生速率 1M/s、2M/s、 3M/s 下的容器内文件采集性能比照。而在实在的生产环境中,日志采集组件的可运维性也至关重要,为运维与前期降级便当,相比于Sidecar模式,K8s下采纳Daemonset模式部署采集组件更加常见。但因为Daemonset 同时将整个集群的采集配置下发到各个采集节点的个性,单个采集节点正在工作的配置必然小于全量采集配置数目,因而咱们还会进行以下2局部试验,验证采集配置的收缩是否会影响采集器的工作效率: 试验3:恒定输出速率3M/s,Filebeat & iLogtail 在采集配置50、100、500、1000 份下的规范输入流采集性能比照。试验4:恒定输出速率3M/s,Filebeat & iLogtail 在采集配置50、100、500、1000 份下的容器内文件采集性能比照。 最初会进行iLogtail 的大流量压测,具体如下: 试验5:iLogtail 在 5M/s、10M/s、10M/s、40M/s 下的规范输入流采集性能。试验6:iLogtail 在 5M/s、10M/s、10M/s、40M/s 下的容器内文件采集性能。三 试验环境所有采集环境数据存储于[2], 感兴趣的同学能够本人入手进行整个比照测试试验, 以下局部别离形容了不同采集模式的具体配置,如果只关怀采集比照后果,能够间接跳过此局部持续浏览。 1 环境运行环境:阿里云ACK Pro 版本节点配置:ecs.g6.xlarge (4 vCPU 16GB) 磁盘ESSD底层容器:ContainerdiLogtail版本:1.0.28FileBeat版本:v7.16.2 2 数据源对于数据源,咱们首先去除因正则解析或多行拼接能力带来的差别,仅仅以最根本的单行采集进行比照,数据产生源模仿产生nginx拜访日志,单条日志大小为283B,以下配置形容了1000条/s 速率下的输出源: apiVersion: batch/v1kind: Jobmetadata: name: nginx-log-demo-0 namespace: defaultspec: template: metadata: name: nginx-log-demo-0 spec: restartPolicy: Never containers: - name: nginx-log-demo-0 image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest command: ["/bin/mock_log"] args: ["--log-type=nginx", "--path=/var/log/medlinker/access.log", "--total-count=1000000000", "--log-file-size=1000000000", "--log-file-count=2", "--logs-per-sec=1000"] volumeMounts: - name: path mountPath: /var/log/medlinker subPath: nginx-log-demo-0 resources: limits: memory: 200Mi requests: cpu: 10m memory: 10Mi volumes: - name: path hostPath: path: /testlog type: DirectoryOrCreate nodeSelector: kubernetes.io/hostname: cn-beijing.192.168.0.1403 Filebeat 规范输入流采集配置Filebeat 原生反对容器文件采集,通过add_kubernetes_metadata组件减少kubernetes 元信息,为防止输入组件导致的性能差别,通过drop_event插件抛弃数据,防止输入,filebeat测试配置如下(harvester_buffer_size 调整设置为512K,filebeat.registry.flush: 30s,queue.mem 参数适当扩充,减少吞吐): ...

January 28, 2022 · 2 min · jiezi

关于kubernetes:纯小白从0搭建k8s-minikube版

纯小白从0搭建k8s minikube版minikube 是本地化的kubernetes,对于大部分没有多台服务器又想实际k8s的同学来说,minikube是比拟好入门的学习工具。 这篇文章也是从minikube动手,讲讲如何搭建k8s集群。 环境一台服务器 2 个 CPU 或更多2GB 可用内存20GB 可用磁盘空间网络连接容器或虚拟机管理器,例如:Docker、Hyperkit、Hyper-V、KVM、Parallels、Podman、VirtualBox或VMware Fusion/Workstation我自己是在linux服务器上操作,上面的实际也是针对linux零碎的。装置装置 minikube在这里依据本人的服务器状况查问下应该装置哪个版本的minikubehttps://minikube.sigs.k8s.io/... 我的服务器是Linux, x86-64 , 抉择装置稳固版本的 minikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64sudo install minikube-linux-amd64 /usr/local/bin/minikube注: linux 下能够用 uname -m 查问处理器架构(Architecture) 装置容器 Dockerk8s是为编排容器而搭建的集群,所以要求有容器。 这里我抉择了Docker做为集群容器 装置之前,查看下linux内核:官网倡议 3.10 以上 uname -r # 5.10.60-9.al8.x86_64更新yum包 yum -y update这一步不是必须的,能够略过,前面呈现不兼容的状况时就必须update了 注: # 降级所有包同时也降级软件和零碎内核; yum -y update# 只降级所有包,不降级软件和零碎内核yum -y upgrade装置须要的软件包, yum-util 提供yum-config-manager性能,另两个是devicemapper驱动依赖 yum install -y yum-utils device-mapper-persistent-data lvm2设置 yum 源地方仓库 yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo阿里仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo查看docker版本并装置查看可装置版本 yum list docker-ce --showduplicates | sort -r装置 ...

January 26, 2022 · 3 min · jiezi

关于kubernetes:Kubernetes的代码规范

动机:从换了工作当前开始做云方面的开发之后,始终思考如何再进步本人的代码品质。发现了这篇文档,这是kubernetes倡议contributor恪守的代码规约,我感觉对于云开发其实都很具备参考价值。文章不多,简略翻译整顿一下,心愿对其余和我一样入门云的同学有所帮忙。 代码标准这是一个汇合,蕴含了我的项目中波及的,指导方针,格调倡议以及用不同语言写代码的提醒。 代码标准Bash https://google.github.io/styl...确保编译,公布,测试和集群治理的脚本,在macOS上能够容许Go Go Code Review Comments Go代码审查评论(能够了解为一些常见的谬误汇合)Effective Go(go语言的文档,入门go必看)晓得并防止go语言的地雷正文你的代码: Go's commenting coventions(go的代码正文标准)如果代码的审查者问起某一处代码为什么那么写,那其实是一个那里须要增加正文的信号。命令行的flag,应该应用破折号,而不是下划线 破折号: ./fakestuff --hello-world xxx下滑线: ./fakestuff --hello_world xxx命名 在抉择interface名字的时候,请思考到包名,以防止反复。 举例:storage.Interface 就比 storage.StorageInterface 更好。不要在包名中应用大写,下划线和破折号在抉择包名的时候,请思考到包的父目录名字。 所以文件 pkg/controllers/autoscaler/foo.go 的包名应该是package autoscaler, 而非package autoscalercontroller。除非有非凡起因,否则 package foo 应该和go文件所在目录名匹配。(即go文件应该在 /foo 下)。援用包的中央能够进行重命名以防止歧意。锁应该命名为lock,并且永远不应该被内嵌(永远放弃 lock sync.Mutex)。当以后有多个锁的时候,给每一个锁一个合乎go标准的不同名字 - statelock, maplock 等。 此处增加一个内嵌构造的谬误应用案例: type A struct { lock sync.Mutex}type B struct { A // 此时B能够应用锁,然而其实应该给B也增加一个lock}API变更API标准kubectl标准日志标准测试规约所有的新包和新的重要性能,都必须有单元测试表驱动测试是测试多个场景/输出的首选,参考: TestNamespaceAuthorization重要的性能应该带有集成测试或者e2e测试 也蕴含新的kubectl和现有的次要性能,都须要集成测试或e2e测试单元测试能够在macOS和Windows平台通过 - 如果你在应用Linux平台的特定性能,你的测试用例必须要么能够跳过其余平台,要么能够编译进去(当你的代码无奈在windows上编译的时候,在编译的时候跳过这些linux平台的特定指令)。防止依赖 Docker hub(比方从docker hub上拉取镜像)。应用 gcr.io 作为代替。防止期待一小段时间(或不期待)然乎期待一个异步执行的事件产生(比方:期待1s,并预期某个pod开始运行)。应该应用“期待减轻试”作为代替。能够参考测试标准以获取更多的倡议。目录和文件规约防止包蔓延。为新包找到一个适合的子目录。(详情能够参见#4851的探讨) 没什么好地位放的库,应该归属到 pkg/util 下。防止通用的性能包。名字为“uitl”的包就很可疑。想法,想一个形容你须要的办法的包名。比方,一个解决期待操作的工具办法Poll,应该放在一个名为wait的包中,全称为wait.Poll。文件名全副小些。Go源文件和目录应该应用下划线,而非破折号 包目录应该尽量避免应用多个单词,如果呈现“a_b”的包名,那么意味着为好拆分一个子目录:a/b文档目录和文件名应该应用破折号而非下划线形容零碎性能的人为示例,应该归属 /docks/user-guide 或者 /docs/admin, 具体取决于这是一个面向部署利用的用户还是集群管理员。 理论利用例子属于/examples。 ...

January 23, 2022 · 1 min · jiezi

关于kubernetes:简单有效全面的Kubernetes监控方案

简介:近年来,Kubernetes作为泛滥公司云原生革新的首选容器化编排平台,越来越多的开发和运维工作都围绕Kubernetes开展,保障Kubernetes的稳定性和可用性是最根底的需要,而这其中最外围的就是如何无效地监控Kubernetes集群,保障整个集群的一个良好的可察看性。本期将为大家介绍Kubernetes的监控计划。 前言近年来,Kubernetes作为泛滥公司云原生革新的首选容器化编排平台,越来越多的开发和运维工作都围绕Kubernetes开展,保障Kubernetes的稳定性和可用性是最根底的需要,而这其中最外围的就是如何无效地监控Kubernetes集群,保障整个集群的一个良好的可察看性。本期将为大家介绍Kubernetes的监控计划。 监控计划指标目前存在多套的Kubernetes监控计划,但理论施行起来可能会遇到很多问题,例如计划部署难、监控指标不准、没有适合的大盘、不晓得哪些指标须要哪些不须要、数据太多很卡等等。其实这些问题的实质上还是因为Kubernetes的架构绝对规范的虚拟机/物理机的形式要简单很多,而面对简单零碎,就须要咱们去做十分多的工作,例如: 明确监控指标:K8s外部的各类零碎组件:APIServer、ETCD、Scheduler、Controller Manager、Kubelet等;K8s底层,例如虚拟机、物理机的监控;K8s之上的业务/进口等相干监控数据采集:例如部署kube-state-metrics采集K8s内资源对象的数据;通过kubelet裸露的prometheus端口拉取运行的Pod、容器指标;通过service端口采集APIServer、ETCD、Scheduler等组件的指标后端建设:搭建数据存储、可视化、告警等后端服务内容建设:配置监控大盘、问题排查教训、每个组件监控的黄金指标、告警模板等计划稳定性建设:包含数据采集、存储、可视化、告警等服务的品质监控和保护SLS全栈监控计划SLS作为阿里可观测性数据引擎,具备可观测数据日志、指标、分布式链路追踪、事件等的一站式采集和存储。为了便于用户疾速接入和监控业务零碎,SLS提供了全栈监控的APP,将各类监控数据汇总到一个实例中进行对立的治理和监控。全栈监控基于SLS的监控数据采集、存储、剖析、可视化、告警、AIOps等能力构建,具体性能如下: 实时监控各类零碎,包含主机监控、Kubernetes监控、数据库监控、中间件监控等。反对ECS、K8s一键装置,反对图形化的监控配置管理,无需登录主机配置采集监控项。运维老司机多年教训的报表总结,包含资源总览、水位监控、热点剖析、具体指标等数十个报表。反对自定义的剖析,反对包含PromQL、SQL92等多种剖析语法。反对对接AIOps指标巡检,利用机器学习技术主动发现异常指标。反对自定义告警配置,告警告诉间接对接音讯核心、短信、邮件、语音(电话)、钉钉,并反对对接自定义WebHook。Kubernetes监控最佳实际SLS全栈监控曾经内置了对于Kubernetes监控的反对,并且解决了十分多的Kubernetes监控的痛点需要,例如: 部署简略,只须要一条命令就能够部署残缺的Kubernetes监控计划应用简略,内置了多种Kubernetes以及上下游相干的监控报表,开箱即用运维简略,所有的监控数据、报表、告警等后端都是云化,只须要按量付费即可,无需去运维监控的实例覆盖面全,监控范畴包含Kubernetes中的各种内置组件,也包含相关联的主机、中间件、数据库等监控部署SLS全栈监控的Kubernetes部署形式绝对比较简单,只须要依照接入页面中的提醒,装置AliyunLogConfig自定义资源和监控组件,两个装置步骤只须要执行两个命令即可。 相干参考(1. 创立全栈监控实例;2. 创立Kubernetes监控) 应用Kubernetes监控部署结束后就会主动部署采集Agent并采集监控数据到云端,默认采集的监控数据有: Kubernetes零碎的元数据信息,例如节点、Pod、Deployment等配置信息Kubernetes零碎组件的监控数据,包含APIServer、ETCD、Kubelet等Kubernetes上运行的Deployment、StatefullSet、DaemonSet、Pod、容器指标信息节点的根底指标,例如节点CPU、内存、网络、磁盘IO等数据采集到云端后,SLS全栈监控会默认提供一系列的Dashboard模板,包含集群级、利用级(Deployment、StatefullSet、DaemonSet等)、Pod级各类指标,绝大部分场景的监控只须要应用内置的Dashboard大盘即可,内置大盘次要有: 1-集群级监控实际在K8s迭代了数十个版本后,集群自身的稳定性个别不须要关怀,绝大部分状况下,都是应用的不合理影响了集群的稳定性。通常状况下,集群级别监控只须要关注集群中运行的利用数量变动以及相干的水位变动。这里最常见的是应用《资源总览》、《水位监控》和《运行时监控》。其中 资源总览中可能查看每个资源的总数以及和前一天相比的变动状况,用来监控是否有一些疾速变动的资源呈现水位监控中次要显示集群中可能申请的Pod、CPU、内存资源以及以后的申请率信息,避免达到水位下限运行时监控中次要显示集群中的Deployment、StatefullSet、Pod、Container的变动状况 2-零碎组件监控实际同样,K8s的零碎组件监控,通常只须要关怀其中应用局部的不合理即可,因而只须要查看其中APIServer和ETCD的局部,避免有十分多的额定资源和拜访导致APIServer或ETCD申请过慢。 3-利用根底指标监控全栈监控默认提供了Node、Pod、Deployment、DaemonSet、StatefullSet的根底指标监控,所有这些资源都包含列表的Overview指标以及详情的Detail指标,而且各个相关联的资源还反对跳转关系,例如:所有的列表反对跳转到详情的Detail指标、Node中反对关联运行的Pod指标、Deployment/DaemonSet/StatefullSet反对跳转关联Pod。 4-热点监控热点监控次要辅助咱们疾速找到“离群”的机器,避免因为局部机器成为热点,导致该机器上利用响应变慢,以至于影响整个集群的性能。在找到热点机器后,还能够通过改机器的IP,跳转到对应Node的具体指标中,查看热点具体是由该节点上哪个Pod引起。 小结本文次要关注在Kubernetes的监控计划上(如何接入可参考《全栈监控阐明》),从监控的问题发现到定位其实还有很多的工作须要做,还须要更多的可观测性数据来撑持,后续咱们会介绍,如何利用多种可观测数据来帮助排查和定位Kubernetes中的各类问题,敬请期待。 原文链接本文为阿里云原创内容,未经容许不得转载。

January 19, 2022 · 1 min · jiezi

关于kubernetes:使用Rainbond打包业务模块实现业务积木式拼装

背景每个程序员在学习开发的过程中,都晓得解耦和模块化的重要性,也心愿本人设计和开发的程序反对模块化,开发好的模块其他人就能疾速复用,为了达成这个成果,咱们学习各种模块化和解耦的技术,从面向对象的设计模式到微服务架构,近几年大家感觉微服务架构是模块化的银弹,都朝微服务架构革新,但实际效果不仅没有很好模块化,反而陷入利用部署和运维的泥潭里。本文将讲讲Rainbond解决利用架构解耦和模块化的一些新思路。 以后业务模块化和解耦的问题架构耦合度还是太高,解耦的不彻底 。比方通过微服务架构拆解的微服务,受开发语言和微服务框架限度,跨开发语言不能调用,跨框架也无奈应用,还受限于部署环境,换个环境须要从新解决部署问题。从开发者角度定义模块,而不是从使用者角度定义模块,导致应用体验不好 。当初咱们定义的模块通常都是开发定义的,因为开发离理论应用场景比拟远,主观的认为模块拆的细和小,不论有什么场景需要我的模块都能复用和满足,但从使用者角度,模块拆分的越小越细,学习和应用的老本就越高,甚至基本应用不起来,很多模块化是适度的拆解和适度的设计。模块化公布简单,保护和降级老本高 。当初的模块化自身是一个开发过程,定义和打包过程都须要开发参加,导致老本高。基于Rainbond利用模型的解耦和实现思路Rainbond是一个云原生利用治理平台,能够治理利用全生命周期。上面咱们具体解说一下Rainbond如何解决上述问题。 Rainbond的外围形象和定义了一套利用模型,通过利用模型从架构上解决解耦问题,利用模型将利用、运维个性和底层基础设施彻底解耦,利用又由多个业务组件拼装而成,每个业务组件能够是不同开发语言和不同构建形式,只有合乎业务契约就能够拼装。通过以上解耦形式,彻底将业务组件、运维能力和部署环境解耦,业务组件只须要专一纯业务,不再关怀因为应用场景差别须要匹配不同开发框架、服务治理性能、运维工具和部署环境,业务组件、运维能力和部署环境实现依据应用场景自由组合和拼装。 基于业务组件的拼装场景: 从业务性能开发上,业务组件提供的是基于业务协定的服务,不受框架和开发语言限度,能够供其余业务场景复用;从运维治理上,在开发测试环境不须要开启运维的个性,在生产环境对业务的治理、监控、性能、稳定性和安全性有更高的要求,按需开启通过插件机制实现的运维个性;从部署环境上,利用模型底层实现对接规范k8s API,所有合乎k8s 规范API的基础设施都能够实现对接和部署,也就实现了业务组件不须要改变就能够部署到私有云、公有云和边缘设施上。 解耦不仅能进步各种场景的灵活性,还能让业务组件、运维插件和基础设施复用率大幅度提高,当积攒的可复用的能力越多,咱们面对不同场景、不同用户和不同市场的响应能力也越强。 Rainbond 利用模型遵循“以利用为核心”的设计理念,将利用无关的底层简单技术封装,简化了解和应用体验。利用模型能够以利用模版的模式展示和存储,以上可复用的能力通过利用模版公布到利用市场,供其他人应用,从而实现模块复用。通常咱们实现模块化次要思考开发者,而利用模版更多思考使用者,从使用者角度形象定义,让使用者能用起来,从而拉动利用模版的生产。从应用体验上,利用模版能够一键装置和一键降级,通过“利落拽”的形式实现业务拼装。利用模版有很强灵活性,利用模版反对不同颗粒度大小,模版和模版能拼装出新的模版,新的模版还能够继续拼装,颗粒的大小由使用者决定,由使用者赋予它意义。 利用模版具备可打包业务的能力,有四个特点: 模块化,能够造成可复用的能力单元,按需拼装应用场景。自治,自力更生,能够独立装置、降级和治理,确保组合的灵活性。可编排,模版和模版能够拼装出新模版,具备有限拼装能力。可发现,通过外部服务和内部服务两种形式体现,可供业务和技术、开发者和其余利用拜访。利用模版的定义和实现内容: 利用根本的元数据 名称工夫戳版本号和别称资源占用状况利用治理模式( k8s service模式、Service Mesh内置和Istio)利用网关信息 对外端口域名和证书公布策略利用全局配置一个或多个业务组件 业务组件的依赖关系业务组件类型(源码、镜像、Helm和第三方API) 组件的构建形式组件的存储形式组件的配置形式组件的运行形式业务组件的插件组件端口和协定组件环境变量模块公布和拼装流程 在Rainbond中利用模版是模块的表现形式,模块公布和拼装流程就是利用模版的公布和拼装过程。模块建设是一个长期过程,强调积攒,更多是在实际过程中的积淀,同时须要依据反馈来继续迭代。这个过程分四步: 第一步: 模块以利用模版的模式一键公布,所见即所得公布业务组件首先须要从业务角度定义颗粒度和业务接口,而后将要公布的组件在Rainbond构建,Rainbond反对各种构建源,构建的同时也在定义利用模版,只有构建胜利,就能够一键公布成利用模版,也就意味着任何在应用平台的开发者都具备公布利用模版的能力,公布的门槛低有利于常识和教训的分享。 第二步: 通过利用市场寄存不同颗粒度的模块利用模版反对不同颗粒度,针对不同应用场景包装不同颗粒度: 面向外部研发场景,次要积攒技术模版,模版颗粒度绝对较小,为了进步开发效率。面向客户交付场景,次要积攒业务模版,模版颗粒度较大,通过模版能够疾速拼装客户解决方案,进步交付效率。面向销售场景,次要积攒能够销售的产品模版,颗粒度最大,能帮忙销售疾速演示、应用和整体交付。 第三步:通过利用模版实现模块化拼装从利用市场一键装置须要拼装的模块(利用模版),通过“利落拽”将多个模块拼装成须要场景,拼装后原模块公布新版本,在拼装好的场景里按需降级。新拼装好的场景公布成利用模版,能够是更大的模块反对更大场景的拼装,也通过利用模版实现后续客户交付流程。 第四步:在实在利用场景中,继续积攒和迭代模块的建设过程,要防止适度设计和提前适度拆解,模块提前拆解或拆解的粒度太小,会导致模块开发和保护老本高,应用体验不好。所以,模块后期设计和开发只能占少部分,大部分模块在实在场景中能力看到它的价值,这时候再公布成可复用的模块,更加具备实用性。同时,模块的边界和性能在实在场景中才有意义,须要依据理论需要一直迭代。 应用场景可拼装的业务模块,进步开发效率和客户交付速度对于软件公司的研发和客户交付场景,通过可拼装的业务模块,在新我的项目研发和新客户交付过程中复用,缩小重复性开发,能大幅度提高效率。 行业业务中台,实现行业能力积攒和复用对于行业用户,实现数字化的过程,会建设很多套零碎,这些零碎有很多能力是通用的,把这些能力积攒下来,后续建设过程间接复用,不仅缩小了建设周期,复用成熟的能力还能进步零碎成熟度。另外,须要业务交融和数据融场景,能够通过业务编排,实现零碎之间的互联互通。 2B软件公司的产品化包装和模块化销售对于2B软件公司,会面对我的项目个性化和产品标准化的矛盾,要解决这对矛盾有两个解决方案:一个是让个性化的我的项目也能疾速积淀出产品,这个过程通过公布利用模版能疾速实现;另一个是将个性化的我的项目按模块化拆解,不同客户抉择不同模块,实现依据客户需要个性化销售;这两个计划能够进一步交融,在晚期,个性化我的项目是驱动力,我的项目的模版能够作为给其余客户演示和交付的产品根底,在一直的交付客户过程中,发现和拆解可复用的模块和个性化的模块,等交付客户越多,积攒的可复用模块也就越多,也晓得哪些模块有商业价值,模块化成为产品的根底,更好服务销售和交付,产品化也就越成熟。

January 17, 2022 · 1 min · jiezi

关于kubernetes:云原生应用之旅Kubernetes成长记-第十站获取云原生旅行秘籍

咱们的《云原生利用之旅——Kubernetes成长记》系列文章又更新了! 这是本系列的第十篇,也是最初一篇文章。因为这系列文章的内容层层递进,因而如果还没看过之前的内容,欢送通过下列链接回看,建设必要的根底,随后再与咱们一起踏上云原生利用的旅程。 初识Kubernetes理解Kubernetes结识Azure Kubernetes Service摸索实际Kubernetes引入微服务架构摸索旅行中的挑战 1摸索旅行中的挑战 2摸索旅行中的挑战 3摸索旅行中的挑战 4本期,作为最终的总结,咱们将从具体问题登程,向大家分享一些无关Kubernetes的最佳实际。 Day 42-50:Kubernetes 最佳实际分享在实现了后面所有学习后,置信大家曾经对Kubernetes有了一个全面理解,造成了本人的常识体系。然而实践须要与实际相结合,这样能力一直地欠缺整个常识体系,同时也能将所学常识高效地利用到生产环境中。 因而,在云原生利用之旅的最初一站,咱们特意为大家筹备了两本旅行秘籍,来帮忙大家将实践和实际相结合。 秘籍一:是由Kubernetes的独特创始人Brendan Burns所写的《Designing Distributed Systems》,欢送点击这里收费下载本书和其余相干资源。这本书介绍了如何对现有软件开发设计模式进行扭转,从而构建一个牢靠的分布式应用程序。通过这本书,零碎工程师或程序开发者将会理解到这些设计模式如何显著地晋升分布式系统的稳定性和品质。 秘籍二:这是咱们为大家筹备的,由许多专家总结的各种最佳实际案例,波及到网络安全、建设CI/CD管道等。 具体来说,大家将理解到无关下列话题的最佳实际: 针对AzureKubernetes集群开发和调试利用Azure Kubernetes中容器组(Pod)安全性的最佳实际Azure Kubernetes中集群隔离的最佳实际Azure Kubernetes中根底调度性能的最佳实际Azure Kubernetes中高级调度性能的最佳实际Azure Kubernetes中认证和受权的最佳实际Azure Kubernetes中集群安全性和降级的最佳实际Azure Kubernetes中容器图像治理和安全性的最佳实际Azure Kubernetes中网络连接性和安全性的最佳实际Azure Kubernetes中存储和备份的最佳实际Azure Kubernetes中的业务可持续性和容灾复原的最佳实际开发胜利的Kubernetes应用程序所需的我的项目设计和布局事不宜迟,马上开始明天的最初一站旅程吧。 点击这里,开始旅程这一系列的残缺旅程就此结束,置信你曾经对 ,尤其是Azure Kubernetes产生了更深刻的意识。那么接下来,无妨在工作中更充沛地使用这项技术,为你的云原生利用设计、构建、开发、部署、运维和治理提供能源吧。云原生利用,其实就是这么简略! 对于这系列内容你是否有什么认识?当前是否心愿看到围绕更多话题开展的更多相似内容?欢送通过评论留言发表想法,咱们会筛选精彩留言并送上精美小礼品一份。欢送大家踊跃参加,也欢送将本文分享给更多有志于云原生开发的小伙伴,大家独特学习,共同进步!

January 16, 2022 · 1 min · jiezi

关于kubernetes:KubeSphere离线无网络环境部署

KubeSphere离线无网络环境部署 KubeSphere 是 GitHub 上的一个开源我的项目,是成千上万名社区用户的聚集地。很多用户都在应用 KubeSphere 运行工作负载。对于在 Linux 上的装置,KubeSphere 既能够部署在云端,也能够部署在本地环境中,例如 AWS EC2、Azure VM 和裸机等。 KubeSphere 为用户提供轻量级安装程序 KubeKey(该程序反对装置 Kubernetes、KubeSphere 及相干插件),装置过程简略而敌对。KubeKey 不仅能帮忙用户在线创立集群,还能作为离线装置解决方案。 后期筹备所需包#后期筹备所需包root@hello:~# wget https://github.com/kubesphere/kubekey/releases/download/v1.2.1/kubekey-v1.2.1-linux-amd64.tar.gzroot@hello:~# tar xvf kubekey-v1.2.1-linux-amd64.tar.gz root@hello:~# ls kk kkroot@hello:~#root@hello:~# curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/images-list.txtroot@hello:~# curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/offline-installation-tool.shroot@hello:~# chmod +x offline-installation-tool.shroot@hello:~# export KKZONE=cnroot@hello:~# ./offline-installation-tool.sh -broot@hello:~# ./offline-installation-tool.sh -s -l images-list.txt -d ./kubesphere-imagesroot@hello:~# curl -L -o /root/kubekey/v1.21.5/amd64/docker-20.10.8.tgz https://download.docker.com/linux/static/stable/x86_64/docker-20.10.8.tgzroot@hello:~# curl -L -o /root/kubekey/v1.21.5/amd64/crictl-v1.22.0-linux-amd64.tar.gz https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.22.0/crictl-v1.22.0-linux-amd64.tar.gz离线环境装置#创立证书,留神“Common Name” 须要写域名root@cby:~# mkdir -p certsroot@cby:~# openssl req \> -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \> -x509 -days 36500 -out certs/domain.crtGenerating a RSA private key............++++.......++++writing new private key to 'certs/domain.key'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [AU]:State or Province Name (full name) [Some-State]:Locality Name (eg, city) []:Organization Name (eg, company) [Internet Widgits Pty Ltd]:Organizational Unit Name (eg, section) []:Common Name (e.g. server FQDN or YOUR name) []:dockerhub.kubekey.localEmail Address []:root@cby:~#装置docker#装置dockerroot@cby:~# root@cby:~/package# lltotal 94776drwxr-xr-x 2 root root 4096 Jan 12 07:17 ./drwx------ 7 root root 4096 Jan 12 07:16 ../-rw-r--r-- 1 root root 23703726 Jan 12 07:17 containerd.io_1.4.12-1_amd64.deb-rw-r--r-- 1 root root 21234738 Jan 12 07:16 docker-ce_5%3a20.10.12~3-0~ubuntu-focal_amd64.deb-rw-r--r-- 1 root root 40652850 Jan 12 07:16 docker-ce-cli_5%3a20.10.12~3-0~ubuntu-focal_amd64.deb-rw-r--r-- 1 root root 7921036 Jan 12 07:16 docker-ce-rootless-extras_5%3a20.10.12~3-0~ubuntu-focal_amd64.deb-rw-r--r-- 1 root root 3517780 Jan 12 07:16 docker-scan-plugin_0.12.0~ubuntu-focal_amd64.debroot@cby:~/package# root@cby:~/package# apt install ./*部署镜像仓库# 导入镜像root@cby:~/cby# docker load -i registry.tar# 启动 Docker 仓库root@cby:~# docker run -d --restart=always --name registry -v "$(pwd)"/certs:/certs -v /mnt/registry:/var/lib/registry -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -p 443:443 registry:2#配置仓库#在 /etc/hosts 中增加一个条目root@cby:~# vim /etc/hostsroot@cby:~# cat /etc/hosts3.7.191.234 dockerhub.kubekey.local#配置免证书root@cby:~# mkdir -p /etc/docker/certs.d/dockerhub.kubekey.localroot@cby:~# cp certs/domain.crt /etc/docker/certs.d/dockerhub.kubekey.local/ca.crtroot@cby:~# #配置免验证root@cby:~# cat /etc/docker/daemon.json{ "insecure-registries":["https://dockerhub.kubekey.local"]}#重载配置,并重启root@cby:~# systemctl daemon-reloadroot@cby:~# systemctl restart docker部署 KubeSphere 和 kubernetes留神增加字段“privateRegistry” ...

January 13, 2022 · 4 min · jiezi

关于kubernetes:Logging-Operator-优雅的云原生日志管理方案-三

前文:Logging Operator 的文章去年拖更很久了,原以为不会再有进度,不过最近在本人的KubeGems我的项目中遇到解决日志可察看性局部的需要时,又从新钻研了下它,于是有了本系列的第三篇。Logging Operator是BanzaiCloud下开源的一个云原生场景下的日志采集计划。它在 2020 年 3 月的时候通过重构后的 v3 版本,底层凭借高效的 fluentbit 和插件丰盛的 flunetd,Logging Operator简直曾经完满的适配了 kubernetes 模式下的日志采集场景,将来可期。去年偶然间发现Rancher 在 2.5 版本之后也采纳了 Logging Operator 作为对立的日志解决方案,足以阐明它正在被一些以 Kubernetes 为外围的治理平台承受,并集成至外部(也包含小白的 KubeGems)。 本文作为后面两篇的续篇,次要跟大家谈谈最近小白用 Logging Operator 来解决用户需要时的案例以及感触,所以我不打算花篇幅对其架构和应用再做形容,感兴趣的同学能够往前翻翻小白的文章。 对于指标利用在容器化的过程中,因为容器文件系统的临时性,开发者始终面临本人的日志文件落盘和输入 stdout 的两难抉择,当研发将利用日志治理的权力交给平台时,意味着平台要做的货色远比利用一对一采集要简单。在泛滥需要中,某天有SRE同学发问:“咱们在阿里云中能够看到日志采集的实时速率,咱们须要为此定制品质监控指标”。这个问题也点醒了我,对于咱们在做公有云时,站在平台里面对日志采集的管道外部的察看始终是处于信息缺失的盲区。好在 fluentbit 和 fluentd 都有独立的prometheus 插件来裸露外部的指标,不过在用 Logging Operator 后,它的指标采集依靠 prometheus operator, 且架构足够清晰,因而咱们也能够有更多的抉择来满足研发的需要。 首先,咱们在定义 logging 时能够让 fluent bit(d)开启 prometheus的采集 spec: fluentdSpec: metrics: serviceMonitor: true serviceMonitorConfig: honorLabels: true // 关上honorLabels次要是为了放弃组件原有的label,防止标签被笼罩。 fluentbitSpec: metrics: serviceMonitor: true这里能够看到 Logging Operator 次要依附ServiceMonitor来做采集端的服务发现,这里须要集群外部运行 Prometheus Operator 以反对该 CRD。如果集群外部没有改资源类型,也能够借助 Prometheus 本身的服务发现机制来实现指标的发现和采集。不过这里仅仅只申明了采集端的指标入口,这外面默认只蕴含了 Fluent bit(d)外部根本的运行状态,如果要进一步实现对日志速率的监控,就得须要 Flunetd 出马了。早些年谷歌的GKE上还在用 Fluentd 作为日志采集器时,偶然间胡乱看(有目标的剽窃)的一条 Prometheus 插件配置引起了我的趣味 ...

January 11, 2022 · 2 min · jiezi

关于kubernetes:自动化集成Pipeline整合DockerK8S

同系列举荐: Jenkins管理工具详解Pipeline流水语法详解Docker容器入门简介Pipeline整合Docker容器Kubernetes容器引擎详解微服务组件二次浅封装前言:该系列文章,围绕继续集成:Jenkins+Docker+K8S相干组件,实现自动化治理源码编译、打包、镜像构建、部署等操作;本篇文章次要形容流水线集成K8S用法。 一、背景形容分布式服务的部署是一个简单的流程,当容器利用存在几十甚至上百的时候,用手动的形式部署显然难度过高,借助Kubernetes容器编排引擎,能够疾速的实现主动部署,扩大,降级等一系列简单步骤。 二、流程设计在之前的篇幅中,曾经形容了流水线的形式进行源码编译Jar包,并构建成Docker镜像的过程,接下来在K8S平台上部署Docker容器,这样整个自动化的流程就根本欠缺了: 外围步骤: 创立yaml文件类型资源管理脚本;执行已部署资源的删除;依据脚本创立新的资源服务;该流程连接在Docker镜像构建胜利之后,能够先在本地pull镜像,也能够间接从近程仓库实时获取镜像。 三、实现过程1、插件装置Jenkins集成K8S的插件:Kubernetes plugin。 2、部署脚本对于K8S部署docker镜像的脚本语法,在K8S根底模块中有详细描述,创立脚本文件的语法在docker流水线模块中同样实用: environment { k8s_directory = 'k8s-deploy' } // K8S部署Docker镜像 stage('K8Sdeploy') { steps { sh ''' rm -rf ${k8s_directory} mkdir -p ${k8s_directory} cd ${k8s_directory}cat>k8s-app.yaml<<EOF---apiVersion: apps/v1kind: Deploymentmetadata: name: k8s-app-deployment labels: app: k8s-appspec: replicas: 2 selector: matchLabels: app: k8s-app template: metadata: labels: app: k8s-app spec: containers: - name: k8s-app image: cicada-image/doc-line-app:latest imagePullPolicy: Never ports: - containerPort: 8079---apiVersion: v1kind: Servicemetadata: name: k8s-app-service labels: app: k8s-appspec: type: NodePort ports: - port: 8080 targetPort: 8079 selector: app: k8s-appEOF cat k8s-app.yaml echo "create k8s-app.yaml success" echo "base Yaml file deploy k8s resource" ls sleep 10 set +e kubectl delete -f k8s-app.yaml sleep 10 set -e kubectl create -f k8s-app.yaml ''' } } }脚本阐明: ...

January 11, 2022 · 1 min · jiezi

关于kubernetes:如何彻底删除EKS中一直卡在Terminating的Namespace

作者:SRE运维博客博客地址:https://www.cnsre.cn/ 文章地址:https://www.cnsre.cn/posts/220107906441/相干话题:https://www.cnsre.cn/tags/eks/介绍最近始终在玩EKS(Elastic Kubernetes Service -- Amazon EKS) 和 kubesphere。 因为之前没有应用过EKS 和 kubesphere 所以这个过程也是一个试错的过程,在我应用 kubesphere 的时候发现有一个日志服务,在好奇心的驱使下,我创立了它。 在我创立了日志服务(KubeSphere Logging System)当前,我发现我并不想应用它。(可能我只是想看看它到底是什么吧。)强迫症我的,就想把它给删除掉。于是我在我的 EKS 中对他进行了强制删除 kubectl delete ns kubesphere-logging-system --force --grace-period=0 让人难堪的是,这个 Namespace 并没有立马删除,我自我安慰到,可能 Namespace 下边有其余没有删除的资源在期待删除,我在等等。。。 过了半个小时,我去查看的时候 [root@ip-10-0-100-206 ~]# kubectl get ns kubesphere-logging-systemNAME STATUS AGEkubesphere-logging-system Terminating 6d19h它如同这地卡在了 Terminating 的状态。我试着寻找解决办法,http://github.com/kubernetes/... 然而这中办法要通过 API 才能够实现。EKS 是托管在 AWS 中的,我基本没有方法去操作eks的后盾。 我开始悔恨我为什么要去装置它,我本能够不折腾的。然而回忆如果我不去装置它的话,我必定会像想在这样惆怅,因为我无奈理解它(KubeSphere Logging System)到底是什么样的。 终于我找到了 commented https://github.com/kubernetes... 如何彻底删除 namespace获取namespace的详情信息并转为jsonkubectl get namespace kubesphere-logging-system -o json > kubesphere-logging-system.json关上 json 文件编辑{ "apiVersion": "v1", "kind": "Namespace", "metadata": { "creationTimestamp": "2021-12-31T05:03:58Z", "deletionTimestamp": "2022-01-05T08:05:40Z", "labels": { "kubesphere.io/namespace": "kubesphere-logging-system", "kubesphere.io/workspace": "system-workspace" }, "managedFields": [ { "apiVersion": "v1", "fieldsType": "FieldsV1", "fieldsV1": { "f:metadata": { "f:labels": { ".": {}, "f:kubesphere.io/namespace": {} }, "f:ownerReferences": { ".": {}, "k:{\"uid\":\"6d535470-2592-4f3c-a155-eabc362c339d\"}": { ".": {}, "f:apiVersion": {}, "f:blockOwnerDeletion": {}, "f:controller": {}, "f:kind": {}, "f:name": {}, "f:uid": {} } } } }, "manager": "controller-manager", "operation": "Update", "time": "2021-12-31T05:04:01Z" }, { "apiVersion": "v1", "fieldsType": "FieldsV1", "fieldsV1": { "f:metadata": { "f:labels": { "f:kubesphere.io/workspace": {} } }, "f:status": { "f:phase": {} } }, "manager": "kubectl", "operation": "Update", "time": "2021-12-31T05:04:01Z" }, { "apiVersion": "v1", "fieldsType": "FieldsV1", "fieldsV1": { "f:status": { "f:conditions": { ".": {}, "k:{\"type\":\"NamespaceContentRemaining\"}": { ".": {}, "f:lastTransitionTime": {}, "f:message": {}, "f:reason": {}, "f:status": {}, "f:type": {} }, "k:{\"type\":\"NamespaceDeletionContentFailure\"}": { ".": {}, "f:lastTransitionTime": {}, "f:message": {}, "f:reason": {}, "f:status": {}, "f:type": {} }, "k:{\"type\":\"NamespaceDeletionDiscoveryFailure\"}": { ".": {}, "f:lastTransitionTime": {}, "f:message": {}, "f:reason": {}, "f:status": {}, "f:type": {} }, "k:{\"type\":\"NamespaceDeletionGroupVersionParsingFailure\"}": { ".": {}, "f:lastTransitionTime": {}, "f:message": {}, "f:reason": {}, "f:status": {}, "f:type": {} }, "k:{\"type\":\"NamespaceFinalizersRemaining\"}": { ".": {}, "f:lastTransitionTime": {}, "f:message": {}, "f:reason": {}, "f:status": {}, "f:type": {} } } } }, "manager": "kube-controller-manager", "operation": "Update", "time": "2022-01-05T08:05:47Z" } ], "name": "kubesphere-logging-system", "ownerReferences": [ { "apiVersion": "tenant.kubesphere.io/v1alpha1", "blockOwnerDeletion": true, "controller": true, "kind": "Workspace", "name": "system-workspace", "uid": "6d535470-2592-4f3c-a155-eabc362c339d" } ], "resourceVersion": "7376520", "uid": "2b76e9b1-75f2-4a2e-a819-73b36aea188e" }, "spec": { "finalizers": [ "kubernetes" # 将此行删除 ] }, "status": { "conditions": [ { "lastTransitionTime": "2022-01-05T08:05:47Z", "message": "All resources successfully discovered", "reason": "ResourcesDiscovered", "status": "False", "type": "NamespaceDeletionDiscoveryFailure" }, { "lastTransitionTime": "2022-01-05T08:05:47Z", "message": "All legacy kube types successfully parsed", "reason": "ParsedGroupVersions", "status": "False", "type": "NamespaceDeletionGroupVersionParsingFailure" }, { "lastTransitionTime": "2022-01-05T08:05:47Z", "message": "All content successfully deleted, may be waiting on finalization", "reason": "ContentDeleted", "status": "False", "type": "NamespaceDeletionContentFailure" }, { "lastTransitionTime": "2022-01-05T08:05:47Z", "message": "Some resources are remaining: fluentbits.logging.kubesphere.io has 1 resource instances", "reason": "SomeResourcesRemain", "status": "True", "type": "NamespaceContentRemaining" }, { "lastTransitionTime": "2022-01-05T08:05:47Z", "message": "Some content in the namespace has finalizers remaining: fluentbit.logging.kubesphere.io in 1 resource instances", "reason": "SomeFinalizersRemain", "status": "True", "type": "NamespaceFinalizersRemaining" } ], "phase": "Terminating" }}找到 spec 将 finalizers 下的 kubernetes 删除具体如下 ...

January 7, 2022 · 4 min · jiezi

关于kubernetes:如何在零停机的情况下迁移-Kubernetes-集群

作者:顾静(子白)|阿里云高级研发工程师;谢瑶瑶(初扬)|阿里云技术专家 导语: 随着云原生理念在企业中的深刻和践行,利用容器化的比例大幅晋升。是否能够保障利用容器化迁徙过程中的安稳切换,保障利用不停机迁徙,成为影响用户业务云化的一个重要条件。本文整顿自阿里云云原生团队在 KubeCon China 2021 线上峰会的分享实录,将通过集群迁徙的需要、场景以及实际形式,介绍如何基于阿里云容器服务 ACK,在零停机的状况下迁徙 Kubernetes 集群。大家好,我是谢瑶瑶,来自阿里云,目前是 Cloud-provider 开源子项目 cloud-provider-alibaba-cloud 我的项目的 Maintainer。明天由我和我的共事顾静一起为大家分享如何不停机的迁徙 Kubernetes 集群。顾静同学也是 cloud-provider-alibaba-cloud 我的项目的 Maintainer。 咱们将从上图几个方面来分享如何不停机的迁徙 Kubernetes 集群。首先咱们会为大家介绍一下集群迁徙的需要以及利用场景;接着咱们会着重介绍如何实现不停机地 Kubernetes 集群迁徙,包含如何进行迁徙前的前置查看,如何做利用的数据迁徙与流量迁徙等等。 为什么要迁徙 Kubernetes 集群?上面简略介绍下集群迁徙的利用场景。 容器化的利用迁云首先咱们来看一下容器化的利用迁徙场景。近年来云原生理念曾经逐步深刻到了各大公司中。据相干考察统计,将近有 65% 的利用曾经实现了容器化,并逐渐从线下的数据中心迁徙到了云上,以便充分利用云的弹性来实现企业的降本增效。是否能够保障利用容器化迁徙过程中的安稳切换,保障利用不停机迁徙,成为影响用户业务云化的一个重要条件。 跨云同步与迁徙 其次是混合云场景下的跨云流量迁徙。对用户来讲,如果云是一个极具性价比的抉择的话,那么混合云和多云的架构进一步为用户提供了一个低成本寰球可达的利用公布平台。多云能够让用户的利用部署到多个云厂商,防止厂商锁定。同时它可能提供更高的议价能力、更强的备份、劫难恢复能力和更强的稳定性。同时还能够为寰球用户提供基于地理位置的就近服务体验。如何进行不停机跨云同步机迁徙是部署跨云/多云利用的前提。 集群新个性与 BreakingChange 场景更高的 Kubernetes 版本往往会具备更多的新个性,然而应用这些新个性并不是没有代价的。如果你须要应用新个性,那就必须降级 Kubernetes 到对应的新版本。这通常不是一件容易的事件。如果你的集群版本太低,那么你须要屡次降级集群能力达到预期的版本。比方从 1.14 顺次降级到 1.16,而后是 1.18,而后才是 1.20,这样来防止单次降级集群版本过大造成的兼容性问题。并且这些新个性所引入的兼容性问题还可能造成服务中断。 除了降级艰难以及版本兼容性问题,降级已有集群无奈实现一些配置变更类的需要。比方你无奈间接变更一个已有集群的网络模式,比方从 IPTables 切换到 IPVS,Flannel 到 Terway,更改 Cluster CIDR 等。这些变更会造成整个集群已有节点及 Pod 的重建,造成服务不可用,甚至是整个集群配置被净化。因而不进行迁徙 Kubernetes 集群利用在这种状况下可能是一个更好的抉择。 接下来咱们介绍一下如何进行不停机迁徙。不停机迁徙总体上分为 3 个阶段。 第一阶段:前置查看,提前裸露迁徙可能存在的潜在危险;第二阶段是利用迁徙,这一阶段须要新建一个指标版本的集群,并将利用及其数据迁徙到新的集群中;第三阶段是流量迁徙,这一阶段至关重要,他决定了如何不停机地将线上流量导入到新建的集群中,并应用新建的集群为用户提供服务。 首先在前置查看阶段,咱们须要尽早的裸露迁徙危险,因而咱们开发了一套前置查看框架,用来查看集群是否做好了迁徙筹备。比方不同版本的集群会有 API groups 兼容性,须要提前解决 Label 的兼容性,不同版本的组件的行为差别等,如 kubeproxy 解决 SLB 流量转发的行为差别,会间接影响流量迁徙的胜利。因而前置查看是一项十分重要的步骤。 ...

January 6, 2022 · 3 min · jiezi

关于kubernetes:Kubernetes-Cronjob的第一次使用

背景尽管用了好几年的kubernetes服务了。然而服务利用的类型个别都是deployments statefuset daemonset几种类型,至于job cronjob的确是没有怎么用过。当初正好有一个php利用的服务须要每五分钟执行一次,恰好能够去相熟一个CronJob的应用! 首先还是温习一遍kubernetes 的workloads参照:https://kubernetes.io/zh/docs/concepts/workloads/ Deployment 和 ReplicaSet (替换原来的资源 ReplicationController)。 Deployment 很适宜用来治理你的集群上的无状态利用,Deployment 中的所有 Pod 都是互相等价的,并且在须要的时候被换掉。StatefulSet 让你可能运行一个或者多个以某种形式跟踪利用状态的 Pods。 例如,如果你的负载会将数据作长久存储,你能够运行一个 StatefulSet,将每个 Pod 与某个 PersistentVolume 对应起来。你在 StatefulSet 中各个 Pod 内运行的代码能够将数据复制到同一 StatefulSet 中的其它 Pod 中以进步整体的服务可靠性。DaemonSet 定义提供节点本地撑持设施的 Pods。这些 Pods 可能对于你的集群的运维是 十分重要的,例如作为网络链接的辅助工具或者作为网络 插件 的一部分等等。每次你向集群中增加一个新节点时,如果该节点与某 DaemonSet 的规约匹配,则管制面会为该 DaemonSet 调度一个 Pod 到该新节点上运行。Job 和 CronJob。 定义一些始终运行到完结并进行的工作。Job 用来表白的是一次性的工作,而 CronJob 会依据其工夫布局重复运行。第三方工作负载资源,通过 定制资源定义(CRD)增加第三方工作负载资源---宰割符Pods当然了以上的工作负载都最终治理的对象都是Pod,所以Pod该放在那里呢?_Pod_ 是能够在 Kubernetes 中创立和治理的、最小的可部署的计算单元.Pod 相似于共享名字空间和文件系统卷的一组 Docker 容器。参照:https://kubernetes.io/zh/docs/concepts/workloads/pods/ Cronjob的第一次应用明确一下需要1. 镜像 php7.4 以上 须要装置gd mysql依赖2. 每五分钟运行一次 根底镜像构建因为我php镜像都是与nginx打包在一起的。且这个利用就算一个纯php利用。就决定从新构建一个镜像,参照dockerhub:https://registry.hub.docker.com/_/phpDockerfile FROM php:7.4-fpmRUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd pdo_mysql mysqli为了克服惰性,工作环境切换到linux了截图不不便就不上图了。镜像仓库应用了腾讯云的个人版仓库tcr(貌似前段时间都合并一起了,过来就是个人版仓库)构建镜像,并推送根底镜像到根底仓库: ...

January 6, 2022 · 2 min · jiezi

关于kubernetes:为kubernetesk8s单独配置kubectl工具

介绍Kubernetes API 是一个 HTTP REST API。这个 API 是真正的 Kubernetes 用户界面,通过它能够齐全管制它。这意味着每个 Kubernetes 操作都作为 API 端点公开,并且能够通过对该端点的 HTTP 申请进行。因而,kubectl 的次要目标是向 Kubernetes API 收回 HTTP 申请: 配置apt软件源root@hello:~# apt-get update && apt-get install -y apt-transport-httpsHit:1 http://192.168.1.104:81/ubuntu focal InReleaseHit:2 http://192.168.1.104:81/ubuntu focal-security InReleaseHit:3 http://192.168.1.104:81/ubuntu focal-updates InReleaseHit:4 http://192.168.1.104:81/ubuntu focal-proposed InReleaseHit:5 https://mirrors.aliyun.com/docker-ce/linux/ubuntu focal InReleaseReading package lists... Done Reading package lists... DoneBuilding dependency tree Reading state information... Doneapt-transport-https is already the newest version (2.0.6).0 upgraded, 0 newly installed, 0 to remove and 54 not upgraded.root@hello:~# root@hello:~# root@hello:~# curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed100 2537 100 2537 0 0 26989 0 --:--:-- --:--:-- --:--:-- 26989OKroot@hello:~# root@hello:~# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list> deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main> EOFroot@hello:~# apt-get updateHit:1 http://192.168.1.104:81/ubuntu focal InReleaseHit:2 http://192.168.1.104:81/ubuntu focal-security InReleaseHit:3 http://192.168.1.104:81/ubuntu focal-updates InReleaseHit:4 http://192.168.1.104:81/ubuntu focal-proposed InReleaseHit:5 https://mirrors.aliyun.com/docker-ce/linux/ubuntu focal InReleaseGet:6 https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial InRelease [9,383 B]Ign:7 https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 PackagesGet:7 https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages [52.6 kB]Fetched 62.0 kB in 1s (59.9 kB/s) Reading package lists... Doneroot@hello:~#应用apt装置kubectl工具root@hello:~# apt-get install -y kubectlReading package lists... DoneBuilding dependency tree Reading state information... DoneThe following NEW packages will be installed: kubectl0 upgraded, 1 newly installed, 0 to remove and 54 not upgraded.Need to get 8,928 kB of archives.After this operation, 46.6 MB of additional disk space will be used.Get:1 https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 kubectl amd64 1.23.1-00 [8,928 kB]Fetched 8,928 kB in 2s (5,599 kB/s) Selecting previously unselected package kubectl.(Reading database ... 129153 files and directories currently installed.)Preparing to unpack .../kubectl_1.23.1-00_amd64.deb ...Unpacking kubectl (1.23.1-00) ...Setting up kubectl (1.23.1-00) ...root@hello:~# root@hello:~# root@hello:~# root@hello:~# mkdir /root/.kube/配置kubectl配置文件root@hello:~# vim /root/.kube/config root@hello:~# root@hello:~# root@hello:~# cat /root/.kube/configapiVersion: v1clusters:- cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR1RENDQXFDZ0F3SUJBZ0lVSlF3R05rQS9BaGxLYVpEcS9oaVpQNStteVJ3d0RRWUpLb1pJaHZjTkFRRUwKQlFBd1lURUxNQWtHQTFVRUJoTUNRMDR4RVRBUEJnTlZCQWdUQ0VoaGJtZGFhRzkxTVFzd0NRWURWUVFIRXdKWQpVekVNTUFvR0ExVUVDaE1EYXpoek1ROHdEUVlEVlFRTEV3WlRlWE4wWlcweEV6QVJCZ05WQkFNVENtdDFZbVZ5CmJtVjBaWE13SUJjTk1qRXhNakF6TURJME1EQXdXaGdQTWpFeU1URXhNRGt3TWpRd01EQmFNR0V4Q3pBSkJnTlYKQkFZVEFrTk9NUkV3RHdZRFZRUUlFd2hJWVc1bldtaHZkVEVMTUFrR0ExVUVCeE1DV0ZNeEREQUtCZ05WQkFvVApBMnM0Y3pFUE1BMEdBMVVFQ3hNR1UzbHpkR1Z0TVJNd0VRWURWUVFERXdwcmRXSmxjbTVsZEdWek1JSUJJakFOCkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXRvcisyNkVLY2VRZGE5eDZodXRoL0h1S21ZRWIKVWhadWJSWVR0VW85WTBpaFc2ME1GK1RBTndNSURFdHo0MGhkSXhrTmtJaDhITEdUcjlwek9hWGNzSVg2NzJsZwpheTdQVGlVZ3I2cVRYcmEzcnpxMjJrdVJtU05yY29ZVmpRbDVXa2ZITWR6cS9GZFpRVDVsRytZZWlLS1Q0c2tzCmJUcmFwSGFUc0VYY0lMb2VBREdCUVJrSXhvTmswWGo3RzNXbEt4enFRRXJ3cVIvbkE3b0U2MStYbHJZaTJTYUkKVFFoaUpMV0lYRTluUkRRNG9hOVNDSXhKUFp5Ukl5UTJFSVc2TG1DRDVtazNtZ2lPNFlVK3ZiMXg3amppS3ZKcQo0MExaaklFQllxY1R4RVN3K2J6cnYrQ1JaMm9UUlRaVGxveGVtYzliOWdhM2pwSjZBbWdvYjRmQkVRSURBUUFCCm8yWXdaREFPQmdOVkhROEJBZjhFQkFNQ0FRWXdFZ1lEVlIwVEFRSC9CQWd3QmdFQi93SUJBakFkQmdOVkhRNEUKRmdRVThBWGxiWis4cnRySmxxYzhpUUxIVjVHUis3TXdId1lEVlIwakJCZ3dGb0FVOEFYbGJaKzhydHJKbHFjOAppUUxIVjVHUis3TXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRkxFMGFGclQzTnptcWRRdCtPN1c1OW04WnJVCnNtbFFzNGt2cFhET0FwdUxaNzROVUY0K3F1aVVRaFB4VEZFVnA2azBqVjlwWVVzbURMKzZmR1BaQldwdVpscisKSjRYZlcwaENITjlnZ05JelcxWUNZNEVxWGp5ZmY1dTZZQ1MyNmU2ZVB3dFA2RGhObE0xNzRNOXpKbnhGbllZdApZYmFjdDhjOTlwRDZvYlI3VGhnd3BFdE9YbW11ajM5OU5ycjR5cXBaQk95dGxQR291N2JzcFl2dkFhMnJ3QnNJCkh4NTNUT1paMXFNRjBYemNWbVk2eHQ1MklkVUtSdDV1QWsxRGRsQ2RkMHplL2RsZmN4MVBxbnV6dDNndldpL3MKRERCYXg0SnB0cXloMjgwZkVlU1pEd0hpYnY4V3AwRi8ranI1N2Q1K0p0cXgrOTlBSXZiUlM5U1JLMmc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K server: https://192.168.1.11:6443 name: cluster1contexts:- context: cluster: cluster1 user: admin name: context-cluster1current-context: context-cluster1kind: Configpreferences: {}users:- name: admin user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQxekNDQXIrZ0F3SUJBZ0lVVFprVnpuSFYxMStjdVRWSnNqWHpUVDVOZHQ4d0RRWUpLb1pJaHZjTkFRRUwKQlFBd1lURUxNQWtHQTFVRUJoTUNRMDR4RVRBUEJnTlZCQWdUQ0VoaGJtZGFhRzkxTVFzd0NRWURWUVFIRXdKWQpVekVNTUFvR0ExVUVDaE1EYXpoek1ROHdEUVlEVlFRTEV3WlRlWE4wWlcweEV6QVJCZ05WQkFNVENtdDFZbVZ5CmJtVjBaWE13SUJjTk1qRXhNakF6TURJME1EQXdXaGdQTWpBM01URXhNakV3TWpRd01EQmFNR2N4Q3pBSkJnTlYKQkFZVEFrTk9NUkV3RHdZRFZRUUlFd2hJWVc1bldtaHZkVEVMTUFrR0ExVUVCeE1DV0ZNeEZ6QVZCZ05WQkFvVApEbk41YzNSbGJUcHRZWE4wWlhKek1ROHdEUVlEVlFRTEV3WlRlWE4wWlcweERqQU1CZ05WQkFNVEJXRmtiV2x1Ck1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBbXNKUHBvdEcyNVE4bExyNC9NK3MKdVYzdWduQU14ZWRKYldFQmcxem81UGtyVW8wTUpDUEkyMTgrby9yTHh2eWJ1SlJKRm5qZlJMWlBZNmYrTGZTKwpJQmppbHJQN3J2OHdLMTh1V0EvNVdoWWNQeUZZYTZKeTVRM1RFdkZBYkdLVU5FUjBiWUhNOXdmTGJhVWNmdGkyCnI5dEd5TFVPYzBpemJ5QkFPZFU3Wkx0Z2d2OVdZb213aThLZG84bXVTTjdqSGlpd1BXTmIvQlBDUzE1WElvTXcKZDRzUW15MFFLVENTOHRuR2FzeFlPQ1pqMkhZMTV6dTdmbFJBeWZZcDNCM1pLZVZzQXdvUkhLQmVCa0NlMklwMQpYVnI3aEtkaEtkRWlaNGROcFVjd1V1U2xBRml3K1lPeUREbDZLdmVsSGVHVCs0N3E5SStjbXc0Rm1Ra1hhNGZFCkhRSURBUUFCbzM4d2ZUQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3RUcKQ0NzR0FRVUZCd01DTUF3R0ExVWRFd0VCL3dRQ01BQXdIUVlEVlIwT0JCWUVGQTRwcGFzNUZzTGJuNVJIVGxwTQo5T1FlQTlZaE1COEdBMVVkSXdRWU1CYUFGUEFGNVcyZnZLN2F5WmFuUElrQ3gxZVJrZnV6TUEwR0NTcUdTSWIzCkRRRUJDd1VBQTRJQkFRQnRsQ21xN1pZQ2lRVVFHSGdSc2lDY2Q0UmVEZy8rcWVmbkJRT3h4SWN4TzU3UE1uNkwKWjVJNnJwUE9TSi9XaFlwUkNGUGVPTzZTUE5GS1RrUzNIQzlocytmY3dCaFBtV0gzNmJXQytDOXkrU1dXcXpkWQpWRzhpbDF1YW8wK04wWTZVdDdnZ0h5V1RscnByem43MmsrT1dKUlA4VWM5SVpBaWx5TUlHTmdZZENoMDVnbVBlCkd3Z0VyMHBLU3A5UE9SUDFZTGF5VVFsdUdCZkhtWERHM21kd3RYVmFFRmJNbEJsRU1CdCsvMW8xMWNVSFdNVWgKYXVBVWNPYy9RTGUvZUVZcFZTT25NRWpmalJZd1BwY1RybnNsYjNjblFnU2VrdE51QXJWZ1Y5UXg3WkhvZ1o3NApJZTJzSU9tRDRBUGEzNWJWb0c1SkMwYkc2NHVVM2hKOEIzNGgKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBbXNKUHBvdEcyNVE4bExyNC9NK3N1VjN1Z25BTXhlZEpiV0VCZzF6bzVQa3JVbzBNCkpDUEkyMTgrby9yTHh2eWJ1SlJKRm5qZlJMWlBZNmYrTGZTK0lCamlsclA3cnY4d0sxOHVXQS81V2hZY1B5RlkKYTZKeTVRM1RFdkZBYkdLVU5FUjBiWUhNOXdmTGJhVWNmdGkycjl0R3lMVU9jMGl6YnlCQU9kVTdaTHRnZ3Y5VwpZb213aThLZG84bXVTTjdqSGlpd1BXTmIvQlBDUzE1WElvTXdkNHNRbXkwUUtUQ1M4dG5HYXN4WU9DWmoySFkxCjV6dTdmbFJBeWZZcDNCM1pLZVZzQXdvUkhLQmVCa0NlMklwMVhWcjdoS2RoS2RFaVo0ZE5wVWN3VXVTbEFGaXcKK1lPeUREbDZLdmVsSGVHVCs0N3E5SStjbXc0Rm1Ra1hhNGZFSFFJREFRQUJBb0lCQUVEa0tUSFVSS25keG1rMgozU0JrbERCRnlyUzI5eVFrancxbUY1UlZhUEpaNkdoODdCSmJUdVZ0VW42L3NxS0ZXV1pVQnpGOURXRnFjRytCCkNYdUxuQTBwWWhsKzdwRzZQeUJ3a0tZc1RJb1JxMVp0VFA0VTU4aFR1Nlc5c3gyL1dCVnlmcjlNSmYyUEx5V1MKamhoQ0ZwZzJnYisyNjVBN2M4R3M3RUZUdjh2RWZ3S3RYVm50SDVKOVA1R3RWTnBEcTNncnM0UWNSajVzNWI0MwppVFZBTGNabkRHTktrS2JwYzdmYWVxdUc0R0VOWUZQcUJ1RnNvM3BUTzEwWlIrbmQxaFFiWm9xdW5JYlRxUDNGClV3NzJ5MTNLSkdjNkRRbnhpUWROeTFIUWlYbFVtTzk1dER4UHhzdFBmM3BpSVhkU1RpRTUzMDNkVEZpMWtFaG4KN2dWcDhxRUNnWUVBeSsvMEdrZVgzTU4ySG1qNU9iWGlnUzM0Sk90elBpUGdmMENMdzQ4K20wV2VNdkVhZmhwbApNRnl2T2V0bWpQWlpIaWNOaTErMkladDBUWnQ4Qmo4QXc1LzVnd3hXRS9pVm5uYVkyd1NaVlcwYlh4QlJqTkNLCnhYTXJJWlRCK2dwcG9tUGpKRlBFMGNnOWgzWUJFMkdBRUc3RjdnNi9yeGNkOVUrV2VMbE9OczhDZ1lFQXdrUmcKa1Y3ajRIU2llMTFHUzgvTGc1YXd4VTNFTXNMdVNSL2RVRTZ3c1hRMWxBS0x0dTlURXZyTFdydHpzYkhwU0JEYgpIUXVOQWhXandQS0RvY0lzcVNpVFdPdkdMa2NrZGphY2dPL3lYcmpTMng1cmpUWjc2NWRjaFRQUGFRVEE1VFdwCmRjbEI4S0g2Z1k2M1FwTWg1RURFZ3VaS2dRWFNCU0IwdUtnRDBWTUNnWUFkc3V3Umg2dU44c2tZMUtDMnpzNFYKa2VRNVBEQ2tOQVZWZ3NqWHlkeU1NQzlCcStyM3dsQktJclZCOGc0VktTc0JRUjZ2MVZob3ZJTExhb0U5UjUrTQozWmN3aG5OaXBTamswdENmMUtPZjFTdlBSRWtjQUtLMDduaXhnMEJjY1hmQXRsczF4eDA2ajdhbUs0RXNtVjVWCkJreTh4bGtUM29IMlg0akNPL292OFFLQmdIZlhVSzg5RjF5Rzl4a2RVRmxDUmV6V1VCUlhSZnAra0JyaUlsZ0IKUXpVbFdFd0hTZ00vSGtOdUhYYktmck9XNmk4LzNydkxQV0NVMHVFYmVpS1dzNUJpN0lzRlg4dDZyYjZUTC9iRwpqd0RxQ1lHTkFaSXFrMFdocVR5dTJudVJxQ0Y5K2gwa1c1NURmbExnSktOWU9xY2hZVmpURWhFSDh5aWdmZ0RQCi9STHJBb0dBUStWMnlJa2VRYm95b2VKSzJGZnhvUXVaNmY3NERraGFhQkV3UU4rM1NIdmIvWlE0YnpDbktvaUYKODA0bWZuN1VZN0ptN0hOTVYzRHpGRzNxYkhiWDZnSEYyWlFiWm4rb0Ywck8vbWxITnE5QzlJWXpXWS9sZERYVApwS3hMaWsxeEt1VURGUFp2Y01XTmY5Vk82NW5HZXo3R2I5UE9UMTdTQ3FmWGZBRHN2V1U9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==root@hello:~#*留神:配置文件中的server须要批改,并且该配置文件在原有的集权治理节点上。 ...

January 6, 2022 · 2 min · jiezi

关于kubernetes:自动化集成Kubernetes容器引擎详解

同系列举荐: Jenkins管理工具详解Pipeline流水语法详解Docker容器入门简介Pipeline整合Docker容器微服务组件二次浅封装前言:该系列文章,围绕继续集成:Jenkins+Docker+K8S相干组件,实现自动化治理源码编译、打包、镜像构建、部署等操作;本篇文章次要形容Kubernetes引擎用法。 一、根底简介Kubernetes简称K8S,是一个开源的分布式的容器编排引擎,用来对容器化利用进行自动化部署和治理。 Control-Plane-Components:管制立体组件,对集群做出全局决策,例如:调度、检测和事件响应,能够在集群中的任何节点上运行; api:作为K8S管制面的组件,凋谢K8S的API,相当于管制面的前端;etcd:兼具一致性和高可用性的键值数据库,作为保留K8S数据的后盾库;scheduler:监听新建未指定运行节点的Pods,并为Pod抉择运行节点;controllermanager:运行控制器过程,逻辑上是一个独自的过程;Node:节点组件:每个节点上运行,保护运行的Pod并提供Kubernetes运行环境; kubelet:在每个节点上运行的代理,保障容器都运行在Pod中;kube-proxy:每个节点上运行的网络代理, 保护节点上的网络规定;Container-Runtime:容器运行时,负责运行容器的软件,反对Docker、containerd、CRI-O等多个容器运行环境,以及任何实现Kubernetes-CRI容器运行环境接口。 二、环境配置1、服务搭建应用Git拉取k8s-docker-desktop-for-mac仓库,执行load_images.sh脚本,会拉取本地docker对应的k8s版本,留神这里要等到脚本流程执行结束,可能因为Git连贯的问题,耗时较长,上面是脚本拉取的镜像: docker imagesREPOSITORY TAG docker/desktop-kubernetes kubernetes-v1.21.5-cni-v0.8.5-critools-v1.17.0-debiank8s.gcr.io/kube-apiserver v1.21.5 k8s.gcr.io/kube-proxy v1.21.5 k8s.gcr.io/kube-controller-manager v1.21.5 k8s.gcr.io/kube-scheduler v1.21.5 docker/desktop-vpnkit-controller v2.0 docker/desktop-storage-provisioner v2.0 k8s.gcr.io/pause 3.4.1 k8s.gcr.io/coredns/coredns v1.8.0 k8s.gcr.io/etcd 3.4.13-0 上述镜像下载实现后,通过docker桌面软件启动k8s即可,这里启动工夫绝对偏长,启动胜利之后界面左下角K8S显示绿色状态: 2、环境查看# 查看版本:kubectl versionClient Version GitVersion:v1.21.5Server Version GitVersion:v1.21.5# 查看集群:kubectl cluster-infoKubernetes control plane is running at local-host:6443# 查看节点:kubectl get nodesNAME STATUS ROLES AGE VERSIONdocker-desktop Ready control-plane,master 23h v1.21.5三、部署Docker镜像1、外围组件在执行Docker镜像部署之前,首先要了解该流程中几个外围的概念: Pod:是能够在Kubernetes中创立和治理的、最小的可部署的计算单元;就Docker概念的术语而言,Pod相似于共享命名空间和文件系统卷的一组Docker容器;ReplicaSet:目标是保护一组在任何时候都处于运行状态的Pod正本的稳固汇合;通常用来保障肯定数量的、完全相同的Pod的可用性;Deployment:为Pods和ReplicaSets提供申明式的更新能力,能够定义Deployment以创立新的ReplicaSet,或删除现有Deployment;Service:形象的形式将运行在一组Pods上的应用程序公开为网络服务,在K8S中逻辑上Pods汇合与拜访策略,这种模式被称为微服务;2、脚本文件这里将Deployment与Service放在一个.yaml文件中;镜像加载设置imagePullPolicy:Never即本地读取;其中服务发现采纳的是NodePort类型,并没有设置具体端口,管制立体会在默认范畴内调配一个端口号; ---apiVersion: apps/v1kind: Deploymentmetadata: name: cloud-app-deployment labels: app: cloud-appspec: selector: matchLabels: app: cloud-app template: metadata: labels: app: cloud-app spec: containers: - name: cloud-app image: Cloud_Url/cicada-image/cloud-app imagePullPolicy: Never ports: - containerPort: 8079---apiVersion: v1kind: Servicemetadata: name: cloud-app-service labels: app: cloud-appspec: type: NodePort ports: - port: 8080 targetPort: 8079 selector: app: cloud-app3、资源管理创立资源 ...

January 6, 2022 · 1 min · jiezi

关于kubernetes:智慧巨鹿使用Rainbond落地实践一个平台管理所有应用系统

背景大家好,我是北京数立通科技有限公司的李栋。最近几年,我始终负责“智慧巨鹿”这一智慧城市我的项目的运行与保护工作。这个我的项目波及到10多家供应商开发的 30 多套智慧城市利用的运维治理,应用传统形式进行部署与治理必定会造成凌乱。咱们在我的项目开始之初,就试图借助云原生相干的技术来进步部署与管理效率。 初识 Rainbond选型的眼光,在一开始就落在了基于容器化技术实现的 Kubernetes 和 Docker Swarm 这两个编排工具上。那时候国内利用云原生技术的场景还很少,项目组内的运维工程师们也并不是很善于容器化等相应技术。为了进一步理解这些编排工具,我动员了工程师们别离去进行调研,当我拿到调研后果时,难堪的发现光是这些编排工具的装置形式,每个工程师带回来的计划都不一样。云原生的入门门槛之高,出乎我的预料。 退而求其次,我决定引入一款不便工程师们上手的利用治理平台,来代替运维工程师实现和 Kubernetes 等编排工具的简单交互工作。至此, Rainbond 第一次进入我的视线。 上手 Rainbond我算是 Rainbond 的老用户了,从 3.X 版本开始就始终在应用它来治理智慧巨鹿我的项目的所有智慧城市利用。目前,共计有 30 多套智慧城市利用稳固运行于两个 Rainbond 集群中,咱们正致力于将智慧城市利用从较老的 3.X 版本 Rainbond 集群迁徙至比拟新的 5.X 版本 Rainbond 集群中。 回忆最后开始应用 Rainbond 时,其易用性给我留下了粗浅的印象。咱们的工程师不再须要间接面对学习门槛极高的 Kubernetes ,甚至连将智慧城市利用进行容器化的操作流程也不须要关注,Rainbond 自带的源码构建性能间接接手了容器化工作。 通过两年多的运行,Rainbond 的稳定性也令人满意,目前智慧巨鹿我的项目团队曾经齐全掌控了这款利用治理平台。 最有价值的场景应用 Rainbond 这几年,我认为给它带来了很多价值点: 稳定性保障真正可能让 Rainbond 在智慧巨鹿我的项目中扎根的,是它体现出的稳定性,产品自身没有重大的BUG,老版本中的一些小毛病团队也都曾经克服。作为一款运行在智慧城市数据中心中的利用治理平台,稳定性的重要水平是要高于其余因素的。在这一点上,Rainbond 体现的很好,即便遭逢了宿主机服务器宕机,利用也能够主动故障迁徙、疾速复原。出了问题的宿主机,在问题修复之后,也能够主动重新加入集群。 便捷的图形化治理界面作为智慧城市数据中心的利用治理平台,它辅助咱们治理了所有智慧城市利用。借助图形化的界面,运维工程师能够很不便的针对这些利用进行操作,包含启停、编排、伸缩等。因为不用编写简单的 Yaml 配置文件,也没有命令行交互,智慧巨鹿我的项目团队的工程师们都得以很快上手。 突出的易用性我认为易用性是 Rainbond 最大的特点。它以利用为外围形象,围绕利用所设计的诸多性能都非常有用。比方主动伸缩、衰弱检测等都是十分实用的性能。网关策略的配置也十分敌对,操作难度根本为零,绑定域名匹配证书都十分不便。 <img src="https://grstatic.oss-cn-shanghai.aliyuncs.com/images/docs/3.6/micro-service/horizen.png" alt="实例伸缩" style="zoom: 67%;" /> 正当的可观测性Rainbond 提供了全面的监控报警零碎,无论是计算资源还是下层的利用零碎,一旦呈现问题都能够很快裸露进去。联合自动化运维能力,问题利用零碎能够做到自愈自复原。而通过观察利用零碎访问量和资源耗费状况,能够更正当的进行资源分配工作。 补足供应商治理流程智慧城市利用来自于很多不同的供应商,在以往应用传统模式部署与运维时,每一家供应商的套路都不一样。这种不同不仅仅体现在开发语言、技术架构上,也体现在具备各自不同的部署形式与运维治理形式。这可苦了咱们的运维管理人员,接手的每一套智慧城市利用的运维治理形式都不一样。 这样的境况在引入 Rainbond 之后好了很多。运维治理团队依附 Rainbond 建设起一套专门针对内部供应商的准入机制,利用对立的标准治理所有智慧城市利用,极大进步了管理效率,也使得运维治理团队能够在脱离供应商反对的状况下,将智慧城市利用治理的很好。目前的管理模式,是将供应商准入环境与最终生产环境依照团队的形式隔离开,供应商开发人员,仅须要关注业务代码的开发过程,智慧巨鹿运维治理团队,会依据代码将业务上线到生产环境中去。真正落地了开发与生产隔离的治理形式。 ...

January 4, 2022 · 1 min · jiezi

关于kubernetes:kubernets-cfs

CFSCFS(Completely Fair Scheduler)调度器谋求的是对所有过程的全面偏心,实际上它的做法就是在一个特定的调度周期内,保障所有待调度的过程都能被执行一遍 过程的运行工夫计算公式为:过程运行工夫 = 调度周期 * 过程权重 / 所有过程权重之和vruntime = 过程运行工夫 * NICE_0_LOAD / 过程权重 = (调度周期 * 过程权重 / 所有过程总权重) * NICE_0_LOAD / 过程权重 = 调度周期 * NICE_0_LOAD / 所有过程总权重 罕用参数阐明sysctl_sched_latency:示意一段时间内,sched_entity必定会被调度到一次,也就是一个sched_entity调度的最大的延时,2.6.35.13内核中默认是6ms。sysctl_sched_min_granularity:示意调度的最小粒度,如果调度的工夫距离小于这个时间段,内核是不会筛选其余sched_entity进行调度,这个2.6.35.13内核中默认是2ms。nr_latency:示意在下面的那段最大调度提早中,最多解决的sched_entity。CPU cgroup 配置阐明/sys/fs/cgroup cpu.sched_latency_ns: 调度周期cpu.cfs_period_us:示意一个cpu带宽,单位为微秒。零碎总CPU带宽: cpu外围数 * cfs_period_uscpu.cfs_quota_us:示意Cgroup能够应用的cpu的带宽,单位为微秒。cfs_quota_us为-1,示意应用的CPU不受cgroup限度。cfs_quota_us的最小值为1ms(1000),最大值为1s。cpu.shares:cpu.shares以绝对比例限度cgroup的cpu,例如:两个工作再cgroup中share设置都为1,他们有雷同的cpu工夫;如果一个share值设置为2,那么能够应用cpu的工夫就是设置为1的2倍。(通过cfs_period_us和cfs_quota_us能够以相对比例限度cgroup的cpu应用,即cfs_quota_us/cfs_period_us 等于过程能够利用的cpu cores,不能超过这个数值。)cpu.stat蕴含了上面三项统计后果 nr_periods: 示意过来了多少个cpu.cfs_period_us外面配置的工夫周期nr_throttled: 在下面的这些周期中,有多少次是受到了限度(即cgroup中的过程在指定的工夫周期中用光了它的配额)throttled_time: cgroup中的过程被限度应用CPU继续了多长时间(纳秒调度阐明有如下系统配置状况: CFS调度周期为10ms,失常负载状况下,过程ready队列外面的过程在每10ms的距离内都会保障被执行一次CFS重调配周期为100ms,用于保障一个过程的limits设置会被反映在每100ms的重调配周期内能够占用的CPU工夫数,在多核零碎中,limit最大值能够是 CFS重调配周期*CPU核数该执行过程队列只有过程A和过程B两个过程过程A和B定义的CPU share占用都一样,所以在系统资源缓和的时候能够保障A和B过程都能够占用可用CPU资源的一半定义的CFS重调配周期都是100ms过程A在100ms内最多占用50ms,过程B在100ms内最多占用20ms 阐明 在后面的4个CFS调度周期内,过程A和B因为share值是一样的,所以每个CFS调度内(10ms),过程A和B都会占用5ms在第4个CFS调度周期完结的时候,在本CFS重调配周期内,过程B曾经占用了20ms,在剩下的8个CFS调度周期即80ms内,过程B都会被限流,始终到下一个CFS重调配周期内,过程B才能够持续占用CPU在第5-7这3个CFS调度周期内,因为过程B被限流,所以过程A能够齐全领有这3个CFS调度的CPU资源,占用30ms的执行工夫,这样在本CFS重调配周期内,过程A曾经占用了50ms的CPU工夫,在前面剩下的3个CFS调度周期即前面的30ms内,过程A也会被限流,始终到下一个CFS重调配周期内,过程A才能够持续占用CPUkubernetes基于CFS进行CPU治理假如pod的资源定义为 resources: limits: cpu: 500m memory: 512Mi requests: cpu: 200m memory: 100Mi查看pod对应的cgroup信息 通过docker确定对应的id 85cb54d5b4-9c6kv 为pod中的关键字段docker ps |grep 85cb54d5b4-9c6kv { "Id": "38abd5a4414774a87e6c509913b03694411ad921f5b6ee8901fd7dfcf0afebd7", "Created": "2021-11-17T07:22:44.873699016Z", xxxxx "CgroupParent": "/kubepods/burstable/pod3b5332a9-b208-4236-b07b-da447f9fff8c",}其中Id和CgroupParent是查找cgroup的要害信息 下面得悉CgroupParent=/kubepods/burstable/pod3b5332a9-b208-4236-b07b-da447f9fff8c。那么在宿主机上的cgroup目录为/sys/fs/cgroup/cpu/kubepods/${CgroupParent} ...

January 3, 2022 · 1 min · jiezi

关于kubernetes:云原生应用之旅Kubernetes成长记-第十站获取云原生旅行秘籍

咱们的《云原生利用之旅——Kubernetes成长记》系列文章又更新了! 这是本系列的第十篇,也是最初一篇文章。因为这系列文章的内容层层递进,因而如果还没看过之前的内容,欢送通过下列链接回看,建设必要的根底,随后再与咱们一起踏上云原生利用的旅程。 初识Kubernetes理解Kubernetes结识Azure Kubernetes Service摸索实际Kubernetes引入微服务架构摸索旅行中的挑战 1摸索旅行中的挑战 2摸索旅行中的挑战 3摸索旅行中的挑战 4 本期,作为最终的总结,咱们将从具体问题登程,向大家分享一些无关Kubernetes的最佳实际。 Day 42-50:Kubernetes 最佳实际分享在实现了后面所有学习后,置信大家曾经对Kubernetes有了一个全面理解,造成了本人的常识体系。然而实践须要与实际相结合,这样能力一直地欠缺整个常识体系,同时也能将所学常识高效地利用到生产环境中。 因而,在云原生利用之旅的最初一站,咱们特意为大家筹备了两本旅行秘籍,来帮忙大家将实践和实际相结合。 秘籍一:是由Kubernetes的独特创始人Brendan Burns所写的《Designing Distributed Systems》,欢送点击这里收费下载本书和其余相干资源。这本书介绍了如何对现有软件开发设计模式进行扭转,从而构建一个牢靠的分布式应用程序。通过这本书,零碎工程师或程序开发者将会理解到这些设计模式如何显著地晋升分布式系统的稳定性和品质。 秘籍二:则是咱们为大家筹备的,由许多专家总结的各种最佳实际案例,波及到网络安全、建设CI/CD管道等。 具体来说,大家将理解到无关下列话题的最佳实际: 针对AzureKubernetes集群开发和调试利用Azure Kubernetes中容器组(Pod)安全性的最佳实际Azure Kubernetes中集群隔离的最佳实际Azure Kubernetes中根底调度性能的最佳实际Azure Kubernetes中高级调度性能的最佳实际Azure Kubernetes中认证和受权的最佳实际Azure Kubernetes中集群安全性和降级的最佳实际Azure Kubernetes中容器图像治理和安全性的最佳实际Azure Kubernetes中网络连接性和安全性的最佳实际Azure Kubernetes中存储和备份的最佳实际Azure Kubernetes中的业务可持续性和容灾复原的最佳实际开发胜利的Kubernetes应用程序所需的我的项目设计和布局事不宜迟,马上开始明天的最初一站旅程吧。 点击这里,开始旅程这一系列的残缺旅程就此结束,置信你曾经对 ,尤其是Azure Kubernetes产生了更深刻的意识。那么接下来,无妨在工作中更充沛地使用这项技术,为你的云原生利用设计、构建、开发、部署、运维和治理提供能源吧。云原生利用,其实就是这么简略! 对于这系列内容你是否有什么认识?当前是否心愿看到围绕更多话题开展的更多相似内容?欢送通过评论留言发表想法,咱们会筛选精彩留言并送上精美小礼品一份。欢送大家踊跃参加,也欢送将本文分享给更多有志于云原生开发的小伙伴,大家独特学习,共同进步!

January 2, 2022 · 1 min · jiezi

关于kubernetes:K8S-系列k8s-学习二kubernetes-核心概念及初步了解安装部署方式

咱们再来回顾一下 K8S 集群架构的组件,在网上找一张集群架构图阐明一波 1、master 组件 apiserver集群的对立入口,restful 的形式,最初交给 etcd 存储 shcheduler节点调度,抉择 node 节点进行利用部署 controller-manager解决集群中惯例后台任务,一个资源对应一个控制器 etcd存储系统,用于保留集群相干的数据 2、node 组件,工作节点 kubeletmaster 排到 node 节点代表,治理本机的容器 kube-proxy提供网络代理,负载平衡等操作 k8s 外围概念 1、Pod 最小部署的逻辑单元是一组容器的汇合共享网络生命周期短暂2、controller 确保预期的 Pod 正本数量无状态利用部署 / 有状态利用部署确保所有 node 运行同一个 Pod执行一次性工作和定时工作3、service 定义一组 Pod 的拜访规定Kubernetes 装置形式:应用官网提供的 minikube应用 kubeadmin 进行部署,k8s的部署工具,跑在 k8s 外面,这个应用起来绝对简略kubeadmin 提供 kubeadmin init 和 kubeadmin join,用于疾速部署 k8s 集群 官网地址为:https://kubernetes.io/docs/re... 本人应用 kubernetes 二进制形式装置部署 (这种部署形式,咱们学习的时候肯定要走这个步骤,一步一步的去搭建,能力遇到很多问题,进而解决他,相熟他)官网提供的 minikubeminikube 点击 Launch Terminal ,能够查看到如下界面 官网给咱们提供的 minikube ,版本是 v1.8.1 零碎是 Ubuntu 18.04 ...

January 1, 2022 · 2 min · jiezi

关于kubernetes:如何从Kubernetes-Event中提取有效信息-IDCF

对于明天的基础设施工程团队来说,太多的监控和告警疲劳是一个真正的问题。当初有很多开源和第三方的工具提供了过滤乐音的能力。这听起来总是很好,而且很可能是真的。然而,如果我通知你,我最喜爱的替代品之一就在你背后,而且简直能够立刻从 Kubernetes 的 API 中取得呢?我说的是 Kubernetes 事件反馈。 Kubernetes 事件提供了对集群衰弱和性能的独特而清晰的见解。而在数据过多的时代,我发现 Kubernetes 事件提供了清晰的洞察力,而没有太多的乐音。 在这篇文章中,咱们将理解 Kubernetes 事件类型,帮忙你拜访和存储事件,并倡议一些大多数团队,无论大小,发现有帮忙的告警。 什么是 Kubernetes 事件?类型和示例Kubernetes 事件是一个对象,它显示集群、节点、pod 或容器内产生的事件。这些对象通常是为了响应 K8s 零碎外部产生的变动而生成的。该 Kubernetes API 服务器使所有外围组件来创立这些事件。通常,每个事件还随同着一条日志音讯。然而,这两者十分不同,不会以任何其余形式相互影响。 对于 Kubernetes 事件须要留神的一件重要事件是,它们会在一段时间后被默认删除,通常在一个小时内。因而,您必须留神并收集产生的重要事件。 要拜访 Kubernetes 事件,您能够运行以下命令: kubectl get event后果如下所示: 如您所见,许多 Kubernetes 事件是由节点中的状态更改引起的。每个事件都有一个 Reason 字段。您能够应用此字段来确定 K8s 事件对象的类型。以下是一些基于事件起因的规范分类。 失败的事件当 K8s 无奈创立一个容器或其余资源时,就会产生失败事件。这可能是因为谬误的镜像、输出谬误、没有预料到的起因以及许多不同的起因。简直能够必定的是,失败的事件将导致你的应用程序的性能被毁坏;因而监测这些类型的事件是十分重要的。 FailedToCreateContainer、FailedToStartContainer、FailedToPullImage、FailedToKillPod等是一些失败事件的例子。 驱赶事件驱赶事件常常产生,因为 K8s 常常染指并驱赶歹意容器和 pod(那些不必要地耗费大量资源的容器)。尽管这是预期的行为,但你依然须要留神这些事件的产生。大量的驱赶事件表明,你没有在零碎中设置适当的阈值。更多的时候,K8s 可能无奈辨认要驱赶的最佳实体,导致不相干的驱赶,从而导致服务流量损失。 节点特定事件许多 K8s 事件都是基于节点及其生命周期流动。您可能曾经留神到NodeHasSufficientMemory、NoteHasSufficientPID、NodeReady和下面示例中的其余事件。这些事件传播了节点相干的状态变动,并在寻找零碎不稳固行为的本源时派上用场。 存储特定事件所有基于云的应用程序都以一种或另一种形式利用存储。K8s 次要连贯 AWS、GCP 等内部服务,或者 Docker 外部资源进行存储。在某些状况下,Pod 可能无奈挂载存储资源。您应该留神FailedMount、FailedAttachVolume事件以辨认谬误存储装置的状况。 调度事件调度事件提供了对资源管理策略效率的洞察。如果您没有很好地治理您的资源,则可能没有任何残余的资源能够调配给新的 Pod。内存或 CPU 有余通常是罪魁祸首,在大多数状况下,您会收到FailedScheduling事件,并分明阐明为什么无奈进行调度。 获取 Kubernetes 事件要拜访 Kubernetes 事件,您能够为 Pod 运行以下命令: ...

December 31, 2021 · 1 min · jiezi

关于kubernetes:彻底搞懂-Kubernetes-中的-Events

大家好,我是张晋涛。 之前我写了一篇《更优雅的 Kubernetes 集群事件度量计划》,利用 Jaeger 利用 tracing 的形式来采集 Kubernetes 集群中的 events 并进行展现。最终成果如下: 写那篇文章的时候,立了个 flag 要具体介绍下其中的原理,鸽了很久,当初年底了,也该收回来了。 Eents 概览咱们先来做个简略的示例,来看看 Kubernetes 集群中的 events 是什么。 创立一个新的名叫 moelove 的 namespace ,而后在其中创立一个叫做 redis 的 deployment。接下来查看这个 namespace 中的所有 events。 (MoeLove) ➜ kubectl create ns moelovenamespace/moelove created(MoeLove) ➜ kubectl -n moelove create deployment redis --image=ghcr.io/moelove/redis:alpine deployment.apps/redis created(MoeLove) ➜ kubectl -n moelove get deployNAME READY UP-TO-DATE AVAILABLE AGEredis 1/1 1 1 11s(MoeLove) ➜ kubectl -n moelove get eventsLAST SEEN TYPE REASON OBJECT MESSAGE21s Normal Scheduled pod/redis-687967dbc5-27vmr Successfully assigned moelove/redis-687967dbc5-27vmr to kind-worker321s Normal Pulling pod/redis-687967dbc5-27vmr Pulling image "ghcr.io/moelove/redis:alpine"15s Normal Pulled pod/redis-687967dbc5-27vmr Successfully pulled image "ghcr.io/moelove/redis:alpine" in 6.814310968s14s Normal Created pod/redis-687967dbc5-27vmr Created container redis14s Normal Started pod/redis-687967dbc5-27vmr Started container redis22s Normal SuccessfulCreate replicaset/redis-687967dbc5 Created pod: redis-687967dbc5-27vmr22s Normal ScalingReplicaSet deployment/redis Scaled up replica set redis-687967dbc5 to 1然而咱们会发现默认状况下 kubectl get events 并没有依照 events 产生的程序进行排列,所以咱们往往须要为其减少 --sort-by='{.metadata.creationTimestamp}' 参数来让其输入能够按工夫进行排列。 ...

December 29, 2021 · 5 min · jiezi

关于kubernetes:kubernetesk8s中部署-efk

Kubernetes 开发了一个 Elasticsearch 附加组件来实现集群的日志治理。这是一个 Elasticsearch、Fluentd 和 Kibana 的组合。 Elasticsearch 是一个搜索引擎,负责存储日志并提供查问接口; Fluentd 负责从 Kubernetes 收集日志,每个node节点下面的fluentd监控并收集该节点下面的系统日志,并将解决过后的日志信息发送给Elasticsearch; Kibana 提供了一个 Web GUI,用户能够浏览和搜寻存储在 Elasticsearch 中的日志。 从官网github仓库下载yaml文件 [root@hello ~/efk]# git clone https://github.com/kubernetes/kubernetes.git[root@hello ~/efk]# kubectl create namespace logging[root@hello ~/efk]#执行所有yaml文件 [root@hello ~/efk]# cd kubernetes/cluster/addons/fluentd-elasticsearch/[root@hello ~/efk/kubernetes/cluster/addons/fluentd-elasticsearch]# kubectl apply -f ./namespace/logging createdservice/elasticsearch-logging createdserviceaccount/elasticsearch-logging createdclusterrole.rbac.authorization.k8s.io/elasticsearch-logging createdclusterrolebinding.rbac.authorization.k8s.io/elasticsearch-logging createdstatefulset.apps/elasticsearch-logging createdconfigmap/fluentd-es-config-v0.2.1 createdserviceaccount/fluentd-es createdclusterrole.rbac.authorization.k8s.io/fluentd-es createdclusterrolebinding.rbac.authorization.k8s.io/fluentd-es createddaemonset.apps/fluentd-es-v3.1.1 createddeployment.apps/kibana-logging createdservice/kibana-logging created查看pod状态: [root@hello ~]# kubectl get pod -n loggingNAME READY STATUS RESTARTS AGEelasticsearch-logging-0 1/1 Running 0 2m17selasticsearch-logging-1 1/1 Running 0 96sfluentd-es-v3.1.1-qw9dj 1/1 Running 1 (97s ago) 2m16skibana-logging-75bd6cccf5-pskrr 1/1 Running 1 (106s ago) 2m16s[root@hello ~]#[root@hello ~]# kubectl get service -n loggingNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEelasticsearch-logging ClusterIP None <none> 9200/TCP,9300/TCP 2m41skibana-logging ClusterIP 10.68.145.186 <none> 5601/TCP 2m40s[root@hello ~]#拜访 kibana ...

December 28, 2021 · 1 min · jiezi

关于kubernetes:阿里巴巴超大规模Kubernetes基础设施运维体系揭秘

简介:ASI:Alibaba Serverless infrastructure,阿里巴巴针对云原生利用设计的对立基础设施。ASI 基于阿里云公共云容器服务 ACK之上,撑持团体利用云原生化和云产品的Serverless化的基础设施平台。 作者 | 仔仁、墨封、光南起源 | 阿里技术公众号 一 序言ASI:Alibaba Serverless infrastructure,阿里巴巴针对云原生利用设计的对立基础设施。ASI 基于阿里云公共云容器服务 ACK之上,撑持团体利用云原生化和云产品的Serverless化的基础设施平台。 2021年天猫双十一,对于ASI来说又是难忘的一年,往年咱们又实现了很多“第一次”: 第一次全面对立调度:电商、搜寻、odps离线和蚂蚁业务全面上ASI对立调度架构,整个业务核数达到了惊人的数千万核。第一次将搜寻业务“无感知”平滑迁徙到ASI:近千万核的业务,业务无感的搬到ASI(然而咱们却经验了很多个不眠之夜)。ASI场景的K8s单集群规模超过万台节点,数百万核,超过K8S社区的5000台规模,一直优化大规模集群的性能和稳定性。中间件服务第一次用云产品架构反对团体业务:中间件基于ASI公共云架构,将中间件服务平滑迁徙到云上,用云产品架构反对团体业务,实现“三位一体”。ASI在大规模生产利用的锻炼下,不仅积淀了十分多的K8S稳定性运维能力,更是在反对serverless场景下孵化了很多创新能力。如果运维过K8S(特地是运维大规模集群)的同学肯定会有很深的感触:把K8S用起来很容易,想要用好K8S真心不容易。ASI在应用K8S调度体系架构晚期成长阶段,也经验过屡次血的教训,过程中咱们继续成长、学习和成熟。例如: 一次失常的Kubernetes大版本升级流程,在降级Kubelet时把一个集群近千台业务POD全副重建;一次线上非标操作,将大批量的vipserver服务全副删除,幸好中间件有推空爱护,才没有对业务造成灾难性影响;节点证书过期,因为节点自愈组件故障状况误判,并且风控/流控规定判断也有误,导致自愈组件误将一个集群300+节点上的业务全副驱赶;以上列举的各种故障场景,即便是业余K8S团队都无奈避雷,如果是对K8S理解很少的用户,必定更无奈预防和躲避危险。所以,给所有正在应用K8S服务,或者想要用K8S服务的用户一个中肯倡议:不要想着本人就能运维好K8S集群,外面有多少坑你真的设想不到,业余的人做业余的事,让业余产品和SRE团队来实现运维。在这里,我也是强烈建议用户应用阿里云容器服务ACK,因为咱们在阿里巴巴大规模场景下积淀能力加强、自动化运维和能力都会反哺到ACK中,帮忙更好的保护用户的Kubernetes集群。 ASI能运维好这么多宏大K8S集群,肯定得有“两把刷子”。明天我会给大家具体介绍ASI在为阿里团体构建云原生基础设施,和反对阿里云云产品Serverless化方面,咱们的运维体系和稳定性工程能力。 二 ASI 技术架构状态在介绍ASI的全托管运维体系之前,我花一点篇幅来介绍一下ASI。ASI是基于ACK、ACR之上面向团体和云产品的Serverless化平台,旨在撑持阿里巴巴利用云原生化和阿里云产品Serverless化。上面介绍容器服务家族的几位成员:ACK、ASK、ACR。 针对阿里巴巴和云产品业务场景,在K8s集群性能层面咱们会给用户提供加强的能力,比方调度能力加强、Workload能力加强、网络能力加强、节点弹性能力加强和多租平安架构等等;在集群运维层面,提供Serverless化的No Ops体验,比方集群大版本升级、组件降级、节点组件降级、节点CVE破绽修复、节点批量运维等,为用户的K8S集群稳定性兜底。 三 ASI全托管运维支撑体系ASI为大规模K8s集群,提供了全托管、免运维的用户体验。这些能力不是Kubernetes原生就具备的,而是在大量实际和失败过程中积淀进去的零碎稳定性加固能力。而放眼整个行业,正是阿里巴巴的规模化简单场景,能力锻炼出大规模场景下的Kubernetes运维服务体系。 在讲ASI运维体系之前,我先强调一下在做零碎能力建设过程的一个重要准则:不反复造轮子,然而也不能齐全依赖其余零碎的能力。没有哪一款产品、零碎能cover住所有业务的所有问题(特地是ASI这样体量的业务)。依赖上下游链路曾经建好的零碎能力,然而不会齐全依赖,要做好零碎分层设计。如果一个零碎做好了底层的运维通道,咱们肯定不会再去做一个运维通道,而是会基于下层运维通道做咱们本人业务变更的编排;如果一个零碎做好了监控、告警链路的能力,咱们会做好监控、告警规定和路由散发的治理。 另外一件十分重要的事件:做稳定性的团队要想做好运维管控零碎,就肯定要对业务架构有十分全面、深刻的理解。稳定性团队不能只做经营,也不能仅仅在架构里面做1-5-10能力,这样是很难把控整个架构的稳定性。ASI SRE尽管是为ASI基础设施稳定性兜底的团队,然而很多SRE同学都能够独立去对接新的业务,并能决定整个业务上ASI的架构。其实很多时候,如果是SRE和研发配合去接的业务方,往往问题都少很多,因为两个角色十分互补:研发在技术架构上有很好的判断,SRE在架构合理性和稳定性危险有很好的判断。 如上图是ASI集群部署架构,齐全基于ACK产品Infra架构的KOK(Kube On Kube)底座。整个架构分层为: 元集群(KOK架构底层K):用于承载Kubernetes业务集群的外围管控组件,将业务集群管控容器化部署,能保障部署形式更加规范,部署效率也会大大晋升。Control-Plane:就是业务集群外围管控4大件:kube-apiserver/kube-controller-manager/kube-scheduler 和 etcd 集群。Add-Ons:Serverless外围性能组件,调度加强组件(对立调度器)、网络组件、存储组件、Workload组件(OpenKruise)、coredns和其余一些旁路组件。Data-Plane:节点管控组件,比方containerd、kubelet,kata 等,还有一些其余节点上的插件。基于ASI整个架构,咱们通过一直摸索、形象,将ASI运维体系,形象成外围几大模块,如下图所示: 对立变更管控:这个是咱们从ASI的第一天就开始建设的零碎能力,因为从阿里巴巴技术倒退过程中汲取的经验教训来看,很多重大故障都是因为变更不标准、没评审、没危险卡点导致;集群运维管控:ACK会提供K8S集群全托管的规范产品能力,然而如何/何时做规模化降级的编排、验证、监控是咱们须要思考;并且咱们还须要建设正当的备容机制,保障集群的稳定性;ETCD运维管控:ETCD也是齐全基于ACK的提供的全托管ETCD Serverless产品能力,咱们会和ACK同学一起共建ETCD性能优化、备容来更好的服务ASI的超大规模集群;组件运维管控:ASI运维体系十分外围的能力建设,Serverless全托管服务,最外围的就是各个外围组件都要有相应的研发团队进行性能扩大和运维反对。这样如何定义研发同学的研发模式,确保日常运维的稳定性和效率是ASI产品能反对大量业务的要害。所以在ASI成立之初(2019年反对团体业务上云)咱们就建设起了ASI组件核心,逐步定义和优化ASI外围组件的研发、运维模式;节点全托管运维管控:这块是十分多云产品团队心愿容器服务提供的能力,特地业务产品团队,他们对基础设施十分不理解,心愿有团队能帮忙将节点运维全托管掉。节点运维能力也是ASI在撑持阿里团体过程中十分重要的能力积淀,咱们也将这部分教训输入到售卖区,并持续一直优化。云上最大的特点就是资源弹性,ASI在售卖区也为云产品用户提供了节点极致弹性能力。1-5-10能力建设:云上用户有一个十分重要的特点,对故障容忍度非常低。这也给ASI带来了十分大的挑战,如何及时发现、排查和复原问题,是咱们始终要一直摸索的。资源经营:备容,老本优化始终都是基础设施服务要解的问题,咱们既要确保服务运行稳固(比方不OOM,不呈现CPU争抢),又要降低成本,更要升高云产品的服务老本。接下来我会针对ASI全托管运维体系中要害零碎/技术能力的设计思路和具体计划进行论述,向大家出现咱们是如何一步步将大规模Kubernetes全托管运维服务建设起来的。 1 集群全托管运维能力当咱们在运维大规模Kubernetes集群的时候,最深的感触就是:规模化既会给单个运维操作带来很大的复杂度,也会将单个运维操作的危险爆炸半径大大扩充。咱们也是常常会被上面的问题挑战: 所有变更是不是都有变更危险管控?这么多的集群,这么多的节点(ASI单集群曾经超过了上万节点),怎么做灰度稳定性危险最小?黑屏变更无奈杜绝,如何把控危险?单个运维动作尽管不难,然而咱们常常面临的是多个运维操作组合的简单操作,零碎如何不便的去编排这些运维操作?带着这四个问题,接下来我会具体介绍,咱们如何在实践中一直形象和优化咱们的零碎能力,并积淀出目前对ASI全托管服务十分重要的稳定性零碎能力。 对立变更危险管控 2019年,当咱们刚成立ASI SRE团队的时候,就在摸索如何把控变更带来的危险。过后的稳定性零碎能力还十分弱,真的是百废待兴,新的SRE团队的同学都是从阿里云自研的Sigma调度零碎各个子研发团队抽调进去的,所以大家对容器、k8s、etcd这些技术都十分精通,然而对如何做SRE,如何做稳定性都是一脸懵。记得刚开始,咱们在ASIOps零碎(过后还叫asi-deploy)里接入ChangeFree变更审批都花了2~3周的工夫。面对新的架构(Sigma -> ASI)、新的场景(团体业务上云)和如此简单、宏大的Kubernetes业务体量,咱们也没有太多外界的教训能够借鉴。 过后咱们想的是靠零碎来做变更危险管控必定是来不及的(团体业务全面上云曾经发展起来,大量新的技术计划进去、大量线上变更),只能先靠“人治”。所以咱们就在整个ASI团队宣导任何变更都要让SRE审批,然而SRE并不能理解ASI所有技术架构细节,做欠缺的危险评估。为此,咱们又开始组建“变更评审”会议,在评审会上邀请每一个畛域的专家同学参加进行变更计划的危险评审。也是因为这个变更评审机制,帮忙ASI在变更危险阻断零碎能力十分有余的状况下稳固的度过了那段“艰巨”的期间。ASI的变更评审会议也始终连续到明天,没有封网非凡期间,都会如期召开。也是那段时间,SRE通过加入每一次线上变更的审批,也积淀了十分多的平安生产规定: 与此同时,咱们开始将这些曾经十分明确的变更危险阻断的规定实现到ASIOps零碎中。刚开始是实现ASI底层零碎架构层面的危险阻断能力,起初发现很多变更只通过底层ASI的指标/探测是没方法发现问题的,须要有一种机制能联动下层业务零碎来触发业务层面的一些危险阻断规定判断,这样能力尽可能的确保咱们的变更不会对下层业务带来影响。所以,咱们开始在ASIOps实现变更危险规定库的治理,并实现了一种webhook的机制,来联动下层业务方的巡检检测/E2E测试。 ASI有了这套在线变更危险阻断零碎能力之后,咱们再也没有呈现过封网期擅自变更,变更不做灰度、不验证等这类触犯变更红线的行为。 变更灰度能力 从理论教训来看,每一次线上变更,不论咱们后期计划评审如许认真、如许严格,危险阻断做的如许欠缺,运维性能写的多好。代码上线之后,总是会呈现咱们“意想不到”的状况。对于曾经晓得的事件,咱们肯定会做的很好,可怕的是咱们思考不到的事件,这不是能力问题,事实架构他就是足够简单。 所以性能上线肯定要灰度。当然,咱们还要保障变更动作的确定性,不能说张三变更是这样程序去灰度的,李四同样的变更又是另外的一个灰度程序。ASI变更灰度能力,咱们也是通过了好屡次迭代。 Sigma时代,集群都是跨机房/跨Region部署的,所以如此宏大的业务体量,Sigma也只须要10个不到的集群来承载。对于研发来说,因为集群个数不多,集群做什么用的、业务类型是怎么的,都很分明,所以公布老本不是很高(当然,因为爆炸半径太大,公布小问题也是一直)。然而演进到ASI架构之后,集群布局是严格依照Region/机房来进行切割的,并且因为K8S集群自身可伸缩性问题,无奈像Sigma集群那样一个集群能承载十几万的节点,K8S社区过后给的是单集群规模不能超过5000节点(尽管当初ASI曾经优化到单集群上万节点,然而过大的集群在稳定性与爆炸半径方面的危险也更高)。在这种架构状态之下,ASI集群的个数必定会远远大于Sigma集群的个数。研发同学都还在Sigma前期、ASI晚期时代,很多研发习惯还是沿用Sigma过后的模式,公布工具还是Sigma时代的产物,没方法反对大规模K8S集群精细化组件公布。各个团队的研发每次公布也都胆战心惊,也怕出问题。 过后,在团体ASI集群个数还没有增长上来之时,咱们就曾经意识到要去解决变更确定性的问题。ASI这么多集群,几十万的节点,如果让各个研发同学去决定如何变更必定是要出问题的。然而,过后咱们的零碎能力又十分有余,也没方法很智能的通过综合判断各种条件来为研发同学的变更确定一条最佳的变更灰度程序。那怎么办呢?零碎不牛逼,然而也得要解决问题啊。所以咱们提出了一个pipeline的概念:由SRE主导和外围研发TL一起确定线上外围集群的公布程序,定义为一条pipeline,而后所有研发在做组件降级的时候,必须要绑定这条pipeline,公布的时候,就能够依照咱们规定好的集群程序来进行灰度公布了,这就是pipeline概念的由来。这一个“看起来很low”的性能,在过后耗费了咱们十分大的精力投入才做出一个初版。不过,当咱们“满怀信心”把pipeline推广给研发同学用的时候,却没有收到咱们设想中的“鲜花和掌声”,而是很多“吐槽和优化倡议”。所以咱们扭转推广策略:逐渐小范畴推广、逐渐修改、而后大范畴推广,直到大家齐全承受。当初pipeline曾经成为了ASI研发同学必不可少的公布工具了。当初想起来,也感觉蛮有意思的。也让咱们明确一个情理:任何新的性能不能“闭门造车”,肯定要从咱们的用户角度登程来进行设计、优化,只有用户称心,能力证实咱们零碎/产品的价值。 下图就是咱们依照测试->小流量->日常->生产这个程序,为研发定义的团体外围交易集群的公布程序: 动态pipeline编排ASI集群程序的能力,在过后只反对团体为数不多的ASI集群时,问题还不大。然而当ASI业务扩大到了阿里云云产品之后,特地是咱们和Flink产品一起孵化出了ASI硬多租VC架构之后,一个用户一个小的集群,集群数量陡增,这种人工编排集群程序就裸露很多问题了: 更新不及时:新增了一个集群,然而没有告诉相干同学,没有加到对应的pipeline;主动适配能力不够:ASI新接入了一个云产品,须要人工新加一条pipeline,常常更新不及时;保护老本高:随着业务越来越多,各个研发owner要本人保护十分多条pipeline;扩大能力有余:pipeline程序不能动静调整,ASI反对云产品之后,有一个十分重要的需要就是依照GC等级进行灰度,动态pipeline齐全无奈反对。基于上述动态pipeline总总有余,咱们也是早就开始了技术计划的优化思考和摸索。ASI外围是资源调度,咱们的调度能力是十分强的,特地是当初团体做的对立调度我的项目,将团体电商业务、搜寻业务、离线业务和蚂蚁业务,全副用对立的调度协定上了ASI。我就在想,ASI对立调度器是资源cpu、memory的调度,集群信息、Node数量、Pod数量、用户GC信息也都是“资源”,为什么咱们不能用调度的思维去解决ASI集群灰度程序编排的问题呢?所以,咱们参考了调度器的设计实现了Cluster-Scheduler,将集群的各种信息整合起来,进行打分、排序,得出一条集群pipeline,而后提供给研发同学来进行灰度公布。 Cluster-Scheduler实现了一种“动静”pipeline的能力,能很好的解决动态pipeline碰到的各种问题: ...

December 27, 2021 · 1 min · jiezi

关于kubernetes:K8S-生态周报-Helm-新版本发布解决了内存泄漏的问题

「K8S 生态周报」内容次要蕴含我所接触到的 K8S 生态相干的每周值得举荐的一些信息。欢送订阅知乎专栏「k8s生态」。Trivy v0.22.0 正式公布Trivy 是一款轻量级的破绽扫描工具,反对包含容器镜像,文件系统,IaC 配置文件等。在我之前的 『K8s生态周报』文章中曾经介绍过屡次,此处就不再开展了。咱们一起来看看这个版本中有哪些值得关注的变更。 新增了一个 --offline-scan 的选项,在对 pom.xml 和 JAR 文件进行扫描的时候,能够通过同时指定 --skip-update 和 --offline-scan 参数来防止 Trivy 去发动更新破绽库的申请。在离线环境或者网络不好的场景下会比拟有用;优化了内存的应用,在之前版本的逻辑中,如果对于大文件也会间接进行读取,有可能会造成 OOM 。本次修改了该问题,退出了肯定的缓存。如果你正在应用 Trivy ,我倡议你进行更新;再对 rpm 包扫描的时候, 反对了 NDB 格局 , 对此格局感兴趣的小伙伴能够去看看 rpm 我的项目的发版阐明。你能够间接去它的 Release 页面下载最新的二进制,也能够间接应用其容器镜像。 (MoeLove) ➜ docker pull aquasec/trivy:0.22.0对于此版本的其余变更,可参考其 ReleaseNote Helm v3.7.2 公布Helm 最新一个大版本是 v3.7.0,但如果你去关注这个我的项目理论的变更,你会发现即便是大版本更新,也没有携带特地值得有价值的内容。反倒是这个小版本中还带来了一些值得注意的内容: 修复了一个 Helm upgrade 时,内存透露的问题,感兴趣的小伙伴能够去围观下 https://github.com/helm/helm/...至于之前版本中的变更,感兴趣的小伙伴能够自行去看看其 ReleaseNote Rook 公布 v1.8 版本Rook 是一个开源的,专用于 Kubernetes 平台上存储编排的组件。目前是 CNCF 毕业我的项目。在之前的 『K8s生态周报』中我也始终都有介绍,这里就不开展了,大家有趣味的能够看看历史文章。当初咱们一起来看它的新版本中有哪些值得关注的内容吧。 首先是一些 Breaking Change: Rook 能够与 Kubernetes v1.16 或更高版本兼容。这次要是因为其应用 CRD 的形式进行实现,而 Kubernetes 在 v1.22 版本中将旧的 API 曾经移除,所以 Rook 将它应用的 API version 也曾经降级到了 v1。在进 rook 降级操作的时候,如果以后的 Kubernetes 版本较低,则倡议先降级 Kubernetes 集群再降级 Rook。在 v1.8 中对于 Ceph Nautilus 版本的反对曾经移除,如果你之前有通过 Rook 部署的 Ceph Nautilus 版本的集群,那么倡议先降级到 Octopus 或者 Pacific 版本,以便保障 Rook 能够失常的解决其版本。当初曾经齐全应用 CSI 接口进行存储管理了,之前 Rook 反对的 Flex 驱动曾经彻底废除,如果想要进行迁徙的小伙伴,能够参考 https://rook.github.io/docs/r...此外还带来了很多新的性能: ...

December 27, 2021 · 2 min · jiezi

关于kubernetes:CKS考试总结

背景cks考试资格是去年流动时候跟cka一起买的 1200左右大洋吧...考了两次 ,第一次57分。我考!第二次 62分, 居然还是没有过来....可能冥冥之中本人有所感应,往年流动的时候购买了一次机会备用的........好歹第三次算是过了86分还好......总结一下15个题吧!具体可参考昕光xg大佬的博客CKS认证--CKS 2021最新真题考试教训分享--练习题04。程序记不太清了,就依照昕光xg大佬列的题目记录一下解题思路吧!墙裂举荐大佬的博客。满满的都是干货! 1. RuntimeClass gVisor依据题目内容创立一个RuntimeClass,而后批改对立namespace下的pod参照:官网文档https://kubernetes.io/docs/concepts/containers/runtime-class/#usage%3Cbr%3E vim /home/cloud_user/sandbox.ymlapiVersion: node.k8s.io/v1kind: RuntimeClassmetadata: name: sandboxhandler: runsckubectl apply -f /home/xxx/sandbox.yml批改xxxx namespace下 pod的runtimeClassName: sandbox kubectl -n xxx edit deployments.apps work01 # runtimeClassName: sandboxkubectl -n xxx edit deployments.apps work02kubectl -n xxx edit deployments.apps work03根本就是这样的 批改3个deployments。减少runtimeClassName: sandbox!期待pod重建实现!如何确定批改胜利呢?kubectl -n xxx exec xxx -- dmesgor kubectl get deployments xxx -n xxx -o yaml|grep runtime就能够吧? 2. NetworkPolicy, 限度指定pod、ns 拜访指定labels的一组pod这个题貌似始终是没有变的,网上也看了好多的解题办法 然而貌似都是有问题的在development命名空间内,创立名为pod-access的NetworkPolicy作用于名为products-service的Pod,只容许命名空间为test的Pod或者在任何命名空间内有environment:staging标签的Pod来拜访。当然了namespace 和podname networkpolicy的名字会变重要的是确定pod namespace的labels kubectl get pods -n development --show-labelskubectl get ns --show-labelscat network-policy.yaml ...

December 24, 2021 · 4 min · jiezi

关于kubernetes:cka的考试题目

1.1 基于角色的访问控制-RBAC 中文解释:创立一个名为deployment-clusterrole的clusterrole,该clusterrole只容许创立Deployment、Daemonset、Statefulset的create操作在名字为app-team1的namespace下创立一个名为cicd-token的serviceAccount,并且将上一步创立clusterrole的权限绑定到该serviceAccount解题: 可参考:https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/https://kubernetes.io/zh/docs... kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,statefulsets,daemonsets kubectl -n app-team1 create serviceaccount cicd-token kubectl -n app-team1 create rolebinding cicd-token-binding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token 1.2 节点保护-指定node节点不可用 参考:https://kubernetes.io/docs/re... 中文解释: 将ek8s-node-1节点设置为不可用,而后从新调度该节点上的所有Pod解题:$ kubectl config use-context ek8s$ kubectl cordon ek8s-node-1 #设置节点是不可调度状态$ kubectl drain ek8s-node-1 --delete-emptydir-data --ignore-daemonsets --force 1.3 K8s版本升级 翻译:现有的 Kubernetes 集权正在运行的版本是 1.18.8,仅将主节点上的所有 kubernetes 控制面板和组件降级到版本 1.19.0 另外,在主节点上降级 kubelet 和 kubectl 解题: 参考:https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/设置为保护状态$ kubectl config use-context mk8s$ kubectl get nodesNAME STATUS ROLES AGE VERSIONk8s-master Ready control-plane,master 11d v1.19.0k8s-node01 Ready <none> 8d v1.18.8k8s-node02 Ready <none> 11d v1.18.8 ...

December 23, 2021 · 4 min · jiezi

关于kubernetes:kubeadm-安装k8s

Kubenertes部署(3master+3node)高可用集群Etce采纳混部形式 Keepalived 实现vip高可用 Haproyxy:以零碎systemd模式运行,提供反向代理至3个master 6443端口; 其余的次要部署组件包含: Metrics 度量 Dashboard Kubernetes 图形化界面 Helm:kubenetes包管理工具; Ingress kubenertes 服务裸露 Longhorn :kubernetes 动静存储组件部署布局节点布局节点主机名 Ip 类型 运行服务Master01 192.168.58.21 K8s master 01 Docker 、etcd、kube-apiserver、kube-schduler、kube-controller-manager、kubectl、kubelet、metrics、calico、haproxyMaster02 192.168.58.22 K8s master02 Docker、etcd、kube-apiserver、kube-schduler、kube-contrller-manager、kubectl、kubelet、metrics、calico、haproxyMaster03 192.168.58.23 K8s master 03 Docker、etcd、kube-apiserver、kube-schduler、kube-controller-manager、kubelet、metrics、calico、haproxyWork01 192.168.58.24 K8s node 01 Docker、kubelet、proxy、calicowork02 192.168.58.25 K8s node 02 Docker、kubelet、proxy、calicowork03 192.168.58.26 K8s node 03 Docker、kubelet、proxy、calicoVip 192.168.58.200 Kubernetes的高可用次要指的是管制立体的高可用,即值多套Master节点和Etcd组件,工作节点通过负载平衡连贯到各Master Kubernetes高可用架构中etcd与Master节点组件混布形式特点 所需机器资源少部署简略,利于治理容易进行横向扩大危险大,一台主机挂了,master和etcd就都少了一套,集群冗余度受到的影响比拟大手动增加解析[root@localhost ~]# vim /etc/hosts192.168.58.11 master01192.168.58.12 master02192.168.58.13 master03192.168.58.14 node01192.168.58.15 node02192.168.58.16 node03[root@master01 ~]# vim k8sinit.sh vm.overcommit_memory = 1vm.panic_on_oom = 0net.ipv6.conf.all.disable_ipv6 = 1EOFsysctl -p /etc/sysctl.d/k8s.conf >&/dev/nullswapoff -ased -i '/ swap / s/^(.*)$/#\1/g' /etc/fstabmodprobe br_netfilter ...

December 23, 2021 · 7 min · jiezi

关于kubernetes:31kubernetesk8s笔记-Promethues二-HPA-横向扩展AutoScale

前言:prometheus:prometheus可能收集各种维度的资源指标,比方CPU利用率,网络连接的数量,网络报文的收发速率,包含过程的新建及回收速率等等,可能监控许许多多的指标,而这些指标K8S晚期是不反对的,所以须要把prometheus能采集到的各种指标整合进k8s里,能让K8S依据这些指标来判断是否须要依据这些指标来进行pod的伸缩。 kube-prometheus-adapter简介prometheus既作为监控零碎来应用,也作为某些非凡的资源指标的提供者来应用。然而这些指标不是规范的K8S内建指标,称之为自定义指标,然而prometheus要想将监控采集到的数据作为指标来展现,则须要一个插件,这个插件叫kube-prometheus-adapter,这些指标判断pod是否须要伸缩的根本规范,例如依据cpu的利用率、内存使用量去进行伸缩。 HPA简介HPA(Horizontal Pod Autoscaler)Pod主动弹性伸缩,K8S通过对Pod中运行的容器各项指标(CPU占用、内存占用、网络申请量)的检测,实现对Pod实例个数的动静新增和缩小。其中 v1版本只能基于观测外围指标进行Pod主动弹性伸缩,v2版能够实现自定义指标的主动弹性伸缩,当业务负载回升超过HPA设定值,创立新的Pod保障业务对资源的需要,当负载下载后能够通过销毁Pod是否资源来进步利用率。HPA 依赖 metrics-server 获取的外围指标。所以咱们要先装置 metrics-server 插件 metrics-servermetrics-server 通过kubelet(cAdvisor)获取监控数据,次要作用是为kube-scheduler,HPA等k8s外围组件,以及kubectl top命令和Dashboard等UI组件提供数据起源。 在新一代的K8S指标监控体系当中次要由外围指标流水线和监控指标流水线组成: 外围指标流水线:是指由kubelet、metrics-server以及由API server提供的api组成;CPU的累积使用率、内存实时使用率,Pod资源占用率以及容器磁盘占用率等等。 监控流水线:用于从零碎收集各种指标数据并提供给终端用户、存储系统以及HPA,蕴含外围指标以及其余许多非核心指标。非核心指标自身不能被K8S所解析。所以须要kube-prometheus-adapter` 插件 将prometheus采集到的数据转化为k8s能了解的格局,为k8s所应用。。 metrics-server通过 Kubernetes 聚合 器 kube-aggregator注册 到 主 API Server 之上, 而后 基于 kubelet 的 Summary API 收集 每个 节 点上 的 指标 数据, 并将 它们 存储 于 内存 中 而后 以 指标 API 格局 提供,如下图: metrics-server基于 内存 存储, 重 启 后 数据 将 全副 失落, 而且 它 仅能 留存 最近 收集 到 的 指标 数据, 因而, 如果 用户 冀望 拜访 历史 数据, 就不 得不 借助于 第三方 的 监控 零碎( 如 Prometheus 等)。 ...

December 22, 2021 · 15 min · jiezi

关于kubernetes:30kubernetesk8s笔记-Promethues一-部署安装

Promethues官网:Prometheus介绍 一、Prometheus介绍Prometheus是一个开源的系统监控和报警零碎,当初曾经退出到CNCF基金会,成为继k8s之后第二个在CNCF托管的我的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也反对多种exporter采集数据,还反对pushgateway进行数据上报,Prometheus性能足够撑持上万台规模的集群。 二、Prometheus特点2.1、prometheus特点1)多维度数据模型 每一个工夫序列数据都由metric度量指标名称和它的标签labels键值对汇合惟一确定:这个metric度量指标名称指定监控指标零碎的测量特色(如:http_requests_total- 接管http申请的总计数)。labels开启了Prometheus的多维数据模型:对于雷同的度量名称,通过不同标签列表的联合, 会造成特定的度量维度实例。(例如:所有蕴含度量名称为/api/tracks的http申请,打上method=POST的标签,则造成了具体的http申请)。这个查询语言在这些度量和标签列表的根底上进行过滤和聚合。扭转任何度量上的任何标签值,则会造成新的工夫序列图。 2)灵便的查询语言(PromQL):能够对采集的metrics指标进行加法,乘法,连贯等操作; 3)能够间接在本地部署,不依赖其余分布式存储; 4)通过基于HTTP的pull形式采集时序数据; 5)能够通过两头网关pushgateway的形式把工夫序列数据推送到prometheus server端; 6)可通过服务发现或者动态配置来发现指标服务对象(targets)。 7)有多种可视化图像界面,如Grafana等。 8)高效的存储,每个采样数据占3.5 bytes左右,300万的工夫序列,30s距离,保留60天,耗费磁盘大略200G。 9)做高可用,能够对数据做异地备份,联邦集群,部署多套prometheus,pushgateway上报数据 2.2、什么是样本样本:在工夫序列中的每一个点称为一个样本(sample),样本由以下三局部组成: 指标(metric):指标名称和形容以后样本特色的 labelsets;工夫戳(timestamp):一个准确到毫秒的工夫戳;样本值(value): 一个 folat64 的浮点型数据表示以后样本的值。示意形式:通过如下表达方式示意指定指标名称和指定标签汇合的工夫序列:<metric name>{<label name>=<label value>, ...} 例如,指标名称为 api_http_requests_total,标签为 method="POST" 和 handler="/messages" 的工夫序列能够示意为:api_http_requests_total{method="POST", handler="/messages"} Metric类型: Counter: 一种累加的metric,如申请的个数,完结的工作数,呈现的谬误数等 Gauge: 惯例的metric,如温度,可任意加减。其为刹时的,与工夫没有关系的,能够任意变动的数据。 Histogram: 柱状图,用于察看后果采样,分组及统计,如:申请持续时间,响应大小。其次要用于示意一段时间内对数据的采样,并可能对其指定区间及总数进行统计。依据统计区间计算 Summary: 相似Histogram,用于示意一段时间内数据采样后果,其间接存储quantile数据,而不是依据统计区间计算出来的。不须要计算,间接存储后果 PromQL 根本应用PromQL (Prometheus Query Language) 是 Prometheus 本人开发的数据查问 DSL 语言,语言表现力十分丰盛,内置函数很多,在日常数据可视化以及rule 告警中都会应用到它。在前面章节会介绍 更多请参见详情 三、Prometheus组件介绍1)Prometheus Server: 用于收集和存储工夫序列数据。 2)Client Library: 客户端库,检测利用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的以后状态发送到prometheus server端。 3)Exporters: prometheus反对多种exporter,通过exporter能够采集metrics数据,而后发送到prometheus server端,所有向promtheus server提供监控数据的程序都能够被称为exporter 4)Alertmanager: 从 Prometheus server 端接管到 alerts 后,会进行去重,分组,并路由到相应的接管方,发出报警,常见的接管形式有:电子邮件,微信,钉钉, slack等。 ...

December 22, 2021 · 3 min · jiezi