首页 文章 精选 留言 我的

精选列表

搜索[k8s],共4073篇文章
优秀的个人博客,低调大师

GitOps入门与实践:如何集成Git和K8S?

也许你之前听说过GitOps,但是对其并不了解。在本文中,我将对其进行简单介绍,它其实是一个应用程序开发和管理中的一个术语,其核心思想是将应用系统的声明性基础架构和应用程序存放在Git的版本控制库中。我们将介绍GitOps是什么,它将如何影响组织以及如何与Kubernetes保持同步。 什么是GitOps GitOps是一种实现持续交付的模型,利用Git开发工具对云原生应用程序进行操作和管理。当将应用程序部署到Kubernetes时,Git应该是唯一的事实来源。当开发人员更改应用程序时,Git将自动把它们push到Kubernetes进行部署。而且,如果Kubernetes内的运行状态发生变化但与Git内的状态不一致,则它们会从Git内恢复到已知状态。 GitOps与CI/CD:它们之间有什么联系? GitOps和CI/CD是十分重要的工作伙伴。CI/CD可以让开发人员持续迭代、开发和部署应用程序。而迭代通常通过一个Git配置仓库进行(尽管也会有其他配置仓库)。在部署/交付阶段,构建的基于容器的应用程序被“push”到Kubernetes进行部署。GitOps会通过Kubernetes使用“pull”的方法来增强CI/CD模型,从而将运维层面带入部署/交付中。 但是,如果有人更改了Kubernetes集群中运行的某些内容,会发生什么?我们将使用Git作为声明性部署工具的主要事实来源,并利用其他工具在出现差异时向我们发出警报。此外,通过利用可以识别运行状态和声明状态之间差异的工具,Kubernetes可以修复为已知/声明的运行状态。 注意:持续集成和持续开发是互补但独立的过程。在理想状态下,GitOps会将批处理规模拆分为单件流程,每次只处理一个单元。但是,由于CI和CD流程发生在不同的组中,因此组织之间的流程可能会有所不同。 GitOps和应用程序生命周期 让我们从应用程序生命周期的视角来看一下GitOps的作用。在典型的生命周期中,应用程序会经历多个状态,包括: 代码 构建 创建镜像 测试 发布 而使用GitOps,这些状态将会扩展为: 部署 在Git仓库中监控更改 日志更改和事件 发生更改时发出警报,并于现有的监控/告警系统集成 更新 在GitOps操作模型下,当应用程序发布时,Kubernetes需要确保其按预期运行。同时,Kubernetes通过确保其稳定性和可用性来管理应用程序的运维工作。如果一个开发人员通过Git更改了该应用程序,Kubernetes将会接受声明并根据需要应用它。 GitOps带来了什么? GitOps为应用程序提供一个操作模型,它可以确保Git提供一个框架来统一应用程序的运行、操作和持续开发。 作为CI/CD流水线的一部分,GitOps为应用程序构建/交付与运行它的位置之间提供了粘合剂。 在Kubernetes平台中,Git为应用程序的开发和运维提供了唯一的事实来源。 应用程序交付和平台管理都是声明式的,同时还能通过Git进行版本控制 Git可以控制回滚、升级以及更改 开发人员不需要知道如何操作运维平台(如Kubernetes),无需了解复杂的部署交付流程,仅需使用熟悉的工具发布新功能即可。极大提升开发者体验。 Git控制并修证差异或“漂移” GitOps利用审核、监控以及回滚功能来增加应用程序发布的可靠性和稳定性 最后,尽管在GitOps模式下还有很多工作要做,但是GitOps、DevOps以及现有CI/CD模式之间存在十分明显的协同作用。GitOps提供了一种用于将应用程序交付到Kubernetes平台的模型,该模型确保了Git是唯一的事实来源并且充分利用Kubernetes平台上的功能。但值得注意的是,GitOps不能替代工具。恰恰相反,GitOps通过声明性的流程和工具来强化流程、提高其成熟度并帮助团队交付应用程序。 GitOps实践:FluxCD Demo FluxCD(或Flux)是一个很棒的工具,它可以将Git和Kubernetes集成起来。Flux本质上是一个Kubernetes Operator,这意味着,你作为一个管理员可以将其安装到Kubernetes 以管理Git和原生Kubernetes之间的集成。 在Kubernetes中,Operator是Kubernetes原生平台的扩展,是一种自定义资源的模式,该自定义资源主要用于管理应用程序及其组件。这意味着,在Kubernetes内部Operator的帮助下,所需状态(如运行状态)将不断检查和调整以符合Git仓库声明的内容。Flux可以集成到你现有的CI/CD工具集中,以进行其他工作流程、权限批准和审核。在Kubernetes中,Flux会监控你通过配置声明的Git仓库是否发生更改,并且如果 Kubernetes Pod上在本地发生了不应发生的更改,Flux将会把Kubernetes更新到所需的运行状态。请记住,Git是事实来源。Flux Operator会检测到这一点,并将正在运行的配置更改回声明的状态。 以下demo,我将会展示如何安装和实现Flux。 前期准备 你将需要: 一个Docker Hub镜像仓库,你可以将Flaskapp docker镜像上传到此处 一个Git Repo并连接它,然后你可以在整个演示过程中根据需要用你的设置替换“< >”中的任何内容 具体步骤 安装Kubernetes 安装并配置fluxctl,Flux部署的原生安装程序 配置Flux以连接到Git Repo 在Git Repo中升级deployment manifest 升级容器镜像并同步 配置漂移(drift)并同步 你可以使用以下配置进行测试或演示。它包括Flask应用程序的Docker file以及Kubernetes deployment/配置文件。在演示中,你会需要它们,此外你还可以将它们上传到你指定的Git仓库中。 Docker File FROM python:3 RUN pip install flask RUN mkdir -p /corp/app WORKDIR /corp/app COPY main.py . ENV FLASK_APP=/corp/app/main.py ENV APP_NAME=MyApp.DevOps ENV APP_VERSION=v1.0.0 CMD ["flask", "run", "--host=127.0.0.1"] main.py Python 脚本文件 import os from flask import Flask app = Flask(__name__) @app.route('/') def index(): appname = os.environ['APP_NAME'] appversion = os.environ['APP_VERSION'] response = "%s - %s.%s\n" %('Hello World', appname, appversion) return response Kubernetes Deployment文件 apiVersion: v1 kind: Namespace metadata: name: my-demo --- apiVersion: apps/v1 kind: Deployment metadata: name: fluxdemo namespace: my-demo annotations: flux.weave.works/tag.flask: glob:develop-v* flux.weave.works/automated: 'true' labels: role: fluxdemo env: demo app: flux spec: replicas: 1 selector: matchLabels: role: fluxdemo template: metadata: labels: role: fluxdemo spec: containers: - name: nginx image: nginx:1.16-perl imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 volumeMounts: - name: nginx-proxy-config mountPath: /etc/nginx/conf.d/default.conf subPath: nginx.conf - name: flask image: docker.io/<your docker repo>/flaskapp:develop-v1.8.0 imagePullPolicy: IfNotPresent ports: - name: http containerPort: 5000 env: - name: APP_NAME value: myfluxdemo.K8s.GitOps - name: APP_VERSION value: v1.0.5 volumes: - name: nginx-proxy-config configMap: name: nginx-conf --- apiVersion: v1 kind: ConfigMap metadata: name: nginx-conf namespace: my-demo data: nginx.conf: |- #CODE1.0: #add the nginx.conf configuration - this will be referenced within the deployment.yaml server { listen 80; server_name localhost; location / { proxy_pass http://localhost:5000/; proxy_set_header Host "localhost"; } } 安装Flux 安装Fluxctl https://docs.fluxcd.io/en/1.18.0/references/fluxctl.html 安装Fluxcd https://docs.fluxcd.io/en/1.18.0/tutorials/get-started.html 为Repo配置Flux 创建一个命名空间 kubectl create ns <namespace> export FLUX_FORWARD_NAMESPACE= <namespace> fluxctl list-workloads 安装Fluxcd以建立与你的Git Repo的连接 export GHUSER="" export REPO="gitops-demo" export NS="flux" fluxctl install \ --git-user=${GHUSER} \ --git-email=${GHUSER}@users.noreply.github.com \ --git-url=git@github.com: Image download failed. {REPO} \ --namespace=${NS} | kubectl apply -f - 创建SSH密钥以添加到Github仓库 在你的terminal中输入以下命令,以获取下一步所需的密钥: fluxctl identity 打开Github,导航到安装Fluxcd时添加的仓库,转到设置-部署密钥,单击【添加部署密钥】,为其指定title,选中【允许write access】,粘贴公共密钥,然后单击【添加密钥】。 在Git Repo中升级Deployment Manifest 打开你的Git Repo,里面应该有deployment.yaml文件,向下滑动直到如下所示部分,然后更改APP_VERSION号码 env: - name: APP_NAME value: myfluxdemo.K8s.GitOps - name: APP_VERSION value: v1.0.5 保存并Commit更改到你的Repo。 Flux将在5分钟之内升级你的deployment 要从localhost进行测试,请在Kubernetes中使用“Port-forward”命令: kubectl get pods -n copy the pod name kubectl port-forward 8080:80 -n 打开其他terminal: curl -s -i http://localhost:8080 升级容器镜像并同步 现在让我们对Docker镜像进行修改并将其上传到我们的Docker Hub镜像仓库中。为此,我们将修改flaskapp目录中的main.py文件。 升级main.py文件。将Hello World更改为其他内容 response = "%s - %s.%s\n" %('Flux World', appname, appversion) 创建一个新的Docker文件并上传到Docker(以及另一个增量版本号)。 等待5分钟,Flux将会自动部署新镜像 配置漂移并同步 现在,我们来测试一下手动更改正在运行的配置会发生什么。 kubectl scale deployment/fluxdemo --replicas=4 -n 现在,我们花几分钟来看看pod并观察发生了什么。我们将会在短时间内(5分钟以内)看到其他的pod,此外我们还将看到许多pod终止。因此,Flux已使配置恢复到当前在Git中保留的已声明的部署状态。 kubectl get po -n --watch 重新运行相同的命令,并且你会看到目前仅有一个正在运行的pod。 别忘了清理和移除deployment和Git连接(如果你想移除它)。否则,你需要开始添加更多的仓库并继续进行构建。 总 结 本文中我们简单介绍了GitOps概念、它与CI/CD的关系以及它对应用程序的生命周期的改变。最后我们还demo了GitOps中的一个小工具Flux,它可以帮助把Kubernetes和Git集成起来,从而优化CI/CD流程。 本文仅仅是一个GitOps的引子,希望你可以通过它更好地入门GitOps,进而提升你的开发部署体验。

优秀的个人博客,低调大师

《K8s监控神器——TSDB for Prometheus的入门与实践》

直播时间 2019年4月25日 19:00 - 19:40(30分钟分享+10分钟答疑) 主讲人 胡建洪(花名:莫趋)阿里云智能-数据库产品事业部技术专家 内容概要 Prometheus作为云原生监控的首选工具,其单机部署的架构设计在提供稳定性和易用性的同时,也使得数据存储受限于单节点的存储大小。阿里云TSDB针对这一痛点,为用户提供了易用性高,稳定性强,性价比优的存储技术方案。本次技术分享中,我们会展示如何配置阿里云TSDB作为Prometheus远程存储的流程,并量化展示本方案达到的查询吞吐高,延迟低,性能按需弹性扩展等优势。关注Prometheus的你,请千万不要错过本次技术分享。 直播地址 阿里数据库技术交流群扫码入群 观看直播

优秀的个人博客,低调大师

K8S从懵圈到熟练:认证与调度

不知道大家有没有意识到一个现实,就是大部分时候,我们已经不像以前一样,通过命令行,或者可视窗口来使用一个系统了。现在我们上微博、或者网购,操作的其实不是眼前这台设备,而是一个又一个集群。 通常,这样的集群拥有成百上千个节点,每个节点是一台物理机或虚拟机。集群一般远离用户,坐落在数据中心。为了让这些节点互相协作,对外提供一致且高效的服务,集群需要操作系统。Kubernetes就是这样的操作系统。 比较Kubernetes和单机操作系统,Kubernetes相当于内核,它负责集群软硬件资源管理,并对外提供统一的入口,用户可以通过这个入口来使用集群,和集群沟通。 而运行在集群之上的程序,与普通程序有很大的不同。这样的程序,是“关在笼子里”的程序。它们从被制作,到被部署,再到被使用,都不寻常。我们只有深挖根源,才能理解其本质。 “关在笼子里”的程

优秀的个人博客,低调大师

【干货满满】K8S常见问答50问(持续更新)

1、logtail有开源计划吗https://yq.aliyun.com/ask/4932882、logtail和log-pilot有啥不同?https://yq.aliyun.com/ask/4932933、数以万计的agent如何部署和升级https://yq.aliyun.com/ask/4932894、如果单个agent需要采集的数据过多,是否有优先级控制?比如高优保障采集某一部分日志https://yq.aliyun.com/ask/4932905、如果某台机器资源紧张,agent是否会进行自我资源限制?比如现在采集流量或者现在自身消耗的cpu?https://yq.aliyun.com/ask/4932916、对采集agent进行资源限制有什么好的方法 现在用的是workloadmanagerhttps://yq.al

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册