学习K8S(1)

Sat 13 June 2020

学习K8S (1)

Kubernetes 是用于自动部署,扩展和管理容器化应用程序的开源系统。云原生的中流砥柱。

背景介绍

K8S是kubernetes的缩写,因为这个词k开头s结尾,并且中间有8个字母。顺带说一下还有一个K3S的K8S发行版(k3s命名的意图是他们的名字长度只有K8S的一半,暗示这个版本的轻量级)。

K8S和Google有着不寻常的联系,虽然在Google内部也有类似这样的一套系统https://queue.acm.org/detail.cfm?id=2898444,并且Google是K8S的主力开发,但实际上K8S和Google的Borg是没有任何代码上的联系。说得准确点是K8S受Borg论文的启发而新建的一个开源项目,并且Google积极的参与了这个项目。

现在主流的云计算厂商都在公有云上提供了K8S的托管服务(使用者只需要参与node节点的运维)。

K8S的功能

K8S的功能主要体现如下:

快速的伸缩能力

水平方向:以Deployment为例,服务可以快速的增加和减少副本数。虽然传统云计算也方便对虚拟机进行扩索容,但他们依赖已经制作好的系统盘和数据盘的惊喜,而K8S只需要容器的image。从粒度和管理的便捷程度都是K8S胜出。作为开发者可以把容器的image作为deploy的payload,但数据盘显然不合适。

垂直方向:在伸缩CPU和内存规格上,K8S就更胜一筹。K8S提供了对Resource的Request和Limit机制,Request是保证给服务的资源,Limit是对服务资源上限的限制。这个机制不会像虚拟机那样是一个固定值,用不到就浪费。

无论是那个方向上的伸缩,你只要通过声明式API给定一个目标,剩下的调度操作都交给K8S。而在传统云计算,对虚拟机的这些调整依赖性运维的手工调整,或者DevOps针对特定云厂商API的编程调度。

服务发现和负载均衡

K8S提供了一套简单的基于DNS的服务发现机制,它虽然有些简陋,你只能通过服务名得到服务的虚拟IP,连服务端口信息都得不到。但它的好处是和编程语言无关,不同语言编写的服务都可以享受这个便利可靠的基础设施。

K8S内部对于Service实现了一套负载均衡机制,这个负载均衡虽然不是完美的,但满足了大部分基于短连接请求的服务调用场景。此外它还设计了一套外部负载均衡机制,满足Service像集群外部暴露的需求。

网络和流量机制

安装一个学习用的K8S集群

mkdir ~/bin
export PATH=$HOME/bin:$PATH
curl -Lo ~/bin/minikube https://mirrors.tuna.tsinghua.edu.cn/github-release/kubernetes/minikube/LatestRelease/minikube-darwin-amd64
xattr -c ~/bin/minikube
brew install kubernetes-cli
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/darwin/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

K8S面向使用者的组件

Pod


Deployment


Service


Ingress


其他

Category: 云原生 Tagged: K8S Kubernates 云原生

Comments