用户您好!请先登录!

分类目录Kubernetes

Google Container Tools: Skaffold

Skaffold is a command line tool that facilitates continuous development for Kubernetes applications. You can iterate on your application source code locally then deploy to local or remote Kubernetes clusters. Skaffold handles the workflow for building, pushing and deploying your application. It also provides building blocks and describe customizations for a CI/CD pipeline.

20个月测试,40次迭代,这款谷歌Kubernetes自动化开源工具通用了

Features

  • Fast local Kubernetes Development
    • optimized source-to-k8s – Skaffold detects changes in your source code and handles the pipeline to buildpush, and deploy your application automatically with policy based image tagging and highly optimized, fast local workflows
    • continuous feedback – Skaffold automatically manages logging and port-forwarding
  • Skaffold projects work everywhere
    • share with other developers – Skaffold is the easiest way to share your project with the world: git clone and skaffold run
    • context aware – use Skaffold profiles, user level config, environment variables and flags to describe differences in environments
    • CI/CD building blocks – use skaffold run end-to-end or just part of skaffold stages from build to deployment in your CI/CD system
  • skaffold.yaml – a single pluggable, declarative configuration for your project
    • skaffold init – Skaffold discovers your files and generates its own config file
    • multi-component apps – Skaffold supports applications consisting of multiple components
    • bring your own tools – Skaffold has a pluggable architecture to allow for different implementations of the stages
  • Lightweight
    • client-side only – Skaffold does not require maintaining a cluster-side component, so there is no overhead or maintenance burden to your cluster.
    • minimal pipeline – Skaffold provides an opinionated, minimal pipeline to keep things simple

Installing Skaffold

Stable binary

For the latest stable release download and place it in your PATH:

https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64

Run these commands to download and place the binary in your /usr/local/bin folder:

curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64
chmod +x skaffold
sudo mv skaffold /usr/local/bin

Latest bleeding edge binary

For the latest bleeding edge build, download and place it in your PATH:

https://storage.googleapis.com/skaffold/builds/latest/skaffold-linux-amd64

Run these commands to download and place the binary in your /usr/local/bin folder:

curl -Lo skaffold https://storage.googleapis.com/skaffold/builds/latest/skaffold-linux-amd64
chmod +x skaffold
sudo mv skaffold /usr/local/bin

 

A Glance at Skaffold Workflow and Architecture

Skaffold simplifies your development workflow by organizing common development stages into one simple command. Every time you run skaffold dev, the system

  1. Collects and watches your source code for changes
  2. Syncs files directly to pods if user marks them as syncable
  3. Builds artifacts from the source code
  4. Tests the built artifacts using container-structure-tests
  5. Tags the artifacts
  6. Pushes the artifacts
  7. Deploys the artifacts
  8. Monitors the deployed artifacts
  9. Cleans up deployed artifacts on exit (Ctrl+C)

What’s more, the pluggable architecture is central to Skaffold’s design, allowing you to use the tool you prefer in each stage. Also, Skaffold’s profiles feature grants you the freedom to switch tools as you see fit depending on the context.

For example, if you are coding on a local machine, you can configure Skaffold to build artifacts with local Docker daemon and deploy them to minikube using kubectl, the Kubernetes command-line interface and when you finalize your design, you can switch to the production profile and start building with Google Cloud Build and deploy with Helm.

Skaffold supports the following tools:

  • Build
    • Dockerfile locally
    • Dockerfile in-cluster (kaniko)
    • Dockerfile on cloud (Google Cloud Build)
    • Bazel locally
    • Jib Maven/Gradle locally
  • Test
    • with container-structure-test
  • Tag
    • tag by git commit
    • tag by current date&time
    • tag by environment variables based template
  • Push
    • don’t push – keep the image on the local daemon
    • push to registry
  • Deploy
    • Kubernetes Command-Line Interface (kubectl)
    • Helm
    • kustomize

architecture

Besides the above steps, skaffold also automatically manages the following utilities for you:

  • forwards container ports to your local machine using kubectl port-forward
  • aggregates all the logs from the deployed pods

Documentation

Documentation for latest release: https://skaffold.dev

Documentation for latest build: https://skaffold-latest.firebaseapp.com

 

蚂蚁金服万级规模 K8s 集群管理系统如何设计

Kubernetes 以其超前的设计理念和优秀的技术架构,在容器编排领域拔得头筹。越来越多的公司开始在生产环境部署实践 Kubernetes,在阿里巴巴和蚂蚁金服 Kubernetes 已被大规模用于生产环境。Kubernetes 的出现使得广大开发同学也能运维复杂的分布式系统,它大幅降低了容器化应用部署的门槛,但运维和管理一个生产级的高可用 Kubernetes 集群仍十分困难。本文将分享蚂蚁金服是如何有效可靠地管理大规模 Kubernetes 集群的,并会详细介绍集群管理系统核心组件的设计。

系统概览

Kubernetes 集群管理系统需要具备便捷的集群生命周期管理能力,完成集群的创建、升级和工作节点的管理。在大规模场景下,集群变更的可控性直接关系到集群的稳定性,因此管理系统可监控、可灰度、可回滚的能力是系统设计的重点之一。除此之外,超大规模集群中,节点数量已经达到 10K 量级,节点硬件故障、组件异常等问题会常态出现。面向大规模集群的管理系统在设计之初就需要充分考虑这些异常场景,并能够从这些异常场景中自恢复。

阅读更多

Steering Kubernetes to an application-centric future

Kubernetes is the cloud’s breakout success story. It’s gone from nothing to the application development equivalent of a superstar in only a few years, a rapid growth that’s left developers looking for better ways to build and manage Kubernetes-hosted applications.

There have been plenty of workarounds and extensions. Tools such as Helm make it easy to deploy resources to clusters, whereas CNAB (Cloud Native Application Bundle) wraps up applications and all their dependencies ready for deployment. At a lower level, services such as Draft help design and build basic services. You can build code and deploy it using familiar containers, and you can quickly assemble elements into Kubernetes applications. You can even automate management with Azure Kubernetes Services.

阅读更多

学习一下美团集群调度系统HULK的技术演进

本文根据美团基础架构部/弹性策略团队负责人涂扬在2019 QCon(全球软件开发大会)上的演讲内容整理而成。本文涉及到的Kubernetes集群管理技术,美团相关的技术实践可参考此前发布的相关文章。

HULK是美团的容器集群管理平台。在HULK之前,美团的在线服务大部分部署都是在VM上,在此期间,我们遇到了很大的挑战,主要包括以下两点:

  • 环境配置信息不一致:部分业务线下验证正常,但线上验证却不正常。
  • 业务扩容流程长:从申请机器、资源审核到服务部署,需要5分钟才能完成。

因为美团很多业务都具有明显的高低峰特性,大家一般会根据最高峰的流量情况来部署机器资源,然而在业务低峰期的时候,往往用不了那么多的资源。在这种背景下,我们希望打造一个容器集群管理平台来解决上述的痛点问题,于是HULK项目就应运而生了。

阅读更多

到底什么是Kubernetes Pod?

【译】What are Kubernetes Pods Anyway?

最近看到了一条关于Kubernetes Pods的推特,来自了不起的Amy Codes(我真的希望这是她的真名):

到底什么是Kubernetes Pod?

虽然不是100%准确(容器并不是一个真正的东西。我们将在稍后讨论这个东东)不过它确实指出了一个令人惊奇的事实。看来确实有必要探讨一下pod和容器到底是什么。

关于Pods,Kubernetes文档提供了对Pods最好、最完整的解释,但它是用非常一般的意义编写的,使用了很多术语。但我还是建议你好好读读它,因为它比我能写的解释更好、更正确。为官方文档打call!!

是容器,也不是容器

许多人已经知道Linux“容器”并不是真实存在的。Linux中没有所谓的“容器”。众所周知,容器使用了Linux内核中的两个特性(命名空间和cgroups)来执行的普通进程。命名空间允许我们为进程提供一个“视图”,该视图将所有内容隐藏在这些命名空间之外,从而为进程提供自己的运行环境。这使得进程无法看到或干扰其他进程。

阅读更多

Kubernetes引入pod的概念,为何不直接操作Docker容器

首先要明确一个概念,Kubernetes并不是只支持Docker这一个容器运行,我们知道Kubernetes通过CRI这个抽象层,支持除Docker之外的其他容器运行,比如rkt甚至支持客户自定义的容器运行。因此,借助CRI这个抽象层,使得Kubernetes不依赖于底层某一种具体的容器运行时实现技术,而是直接操作pod,pod内部再管理多个业务上紧密相关的用户业务容器,这种架构便于Kubernetes做扩展。这是第一个原因。

为什么Kubernetes要引入pod的概念,而不直接操作Docker容器

阅读更多

Kubernetes 集群架构与高可用解析

基本工作过程

Kubernetes 的核心工作过程:

  1. 资源对象:Node、Pod、Service、Replication Controller 等都可以看作一种资源对象
  2. 操作:通过使用 kubectl 工具,执行增删改查
  3. 存储:对象的目标状态预设状态),保存在 etcd 中持久化储存;
  4. 自动控制:跟踪、对比 etcd 中存储的目标状态与资源的当前状态,对差异资源纠偏,自动控制集群状态。

Kubernetes 实际是:高度自动化的资源控制系统,将其管理的一切抽象为资源对象,大到服务器 Node 节点,小到服务实例 Pod。

阅读更多

最简单的Kubernetes描述

什么是Kubernetes?

Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。

使用Kubernetes可以:

  • 自动化容器的部署和复制
  • 随时扩展或收缩容器规模
  • 将容器组织成组,并且提供容器间的负载均衡
  • 很容易地升级应用程序容器的新版本
  • 提供容器弹性,如果容器失效就替换它,等等…

实际上,使用Kubernetes只需一个部署文件,使用一条命令就可以部署多层容器(前端,后台等)的完整集群:

$ kubectl create -f single-config-file.yaml

kubectl是和Kubernetes API交互的命令行程序。现在介绍一些核心概念。

阅读更多

基于Docker 和 Kubernetes 的架构

神话还是现实?Docker 和 Kubernetes 的完美架构

在 Docker 和 Kubernetes 时代,软件开发的世界发生了怎样的变化?有可能使用这些技术一劳永逸地构建一个放之四海而皆准的架构吗?

译自:https://medium.com/@dpaunin/the-best-architecture-with-docker-and-kubernetes-myth-or-reality-77b4f8f3804d

作者/来源: Dmitriy Paunin 译者: 云技术社区/老刀IBM

在 Docker 和 Kubernetes 时代,软件开发的世界发生了怎样的变化?有可能使用这些技术一劳永逸地构建一个放之四海而皆准的架构吗?当所有东西都“打包”在容器中时,有可能统一开发和集成的过程吗?这些决策有什么要求?它们会带来什么限制?它们会让开发人员的生活变得更轻松,还是会增加不必要的复杂性?

阅读更多