阅读Kubernetes文档总结

Kubernetes(K8S)中文文档_Kubernetes中文社区


Kubernetes基础

在集群上规模化,带版本,部署和调试容器化应用

实现热更新

Kubernetes操作

创建集群

部署,发布,查看,更新应用‘

Minikube 部署 Kubernetes

创建Kubernetes cluster(单机版)最简单的方法是minikube:

使用 kubectl 创建Deployment

创建Deployment后,Kubernetes master 会将Deployment创建好的应用实例调度到集群中的各个节点。

Kubernetes Deployment Controller会持续监视这些实例

如果管理实例的节点被关闭或删除,那么 Deployment Controller将会替换它们,实现自我修复能力。

老的部署方式,一般通常安装脚本来启动应用,但是便不会在机器故障后“自动”恢复

集群的方式也是一个master,多个slave.master部署一个应用然后再分发到多个node上

创建Deployment时,需要为应用程序指定容器镜像以及要运行的副本数

kubectl version

kubectl get nodes

kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080

kubectl get deployments

运行一个代理

We will open a second terminal window to run the proxy.

echo -e "\n\n\n\e[92mStarting Proxy. After starting it will not output a response. Please click the first Terminal Tab\n"; kubectl proxy

curl http://localhost:8001/version

API服务器将根据POD名称自动为每个POD创建一个端点,这个端点也可以通过代理访问。首先,我们需要获得POD名称,然后将变量POD_NAME存储在环境中:

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')

echo Name of the Pod: $POD_NAME

curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/

Kubernetes 中查看Pods和Nodes

Kubernetes Pod

Deployment时,Kubernetes会创建了一个Pod来托管应用。

pod组成

Volumes 卷

唯一的集群IP地址

每个容器运行的信息,例如:容器镜像版本

Kubernetes Node上至少运行着

Kubelet

container runtime

一个service管理一组pod

Service的四种type:

ClusterIP(默认) - 在集群中内部IP上暴露服务。此类型使Service只能从群集中访问。

NodePort - 通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动创建。通过请求 <NodeIP>:<NodePort>,可以从集群的外部访问一个 NodePort 服务。

LoadBalancer - 使用云提供商的负载均衡器(如果支持),可以向外部暴露服务。外部的负载均衡器可以路由到 NodePort 服务和 ClusterIP 服务。

ExternalName - 通过返回 CNAME 和它的值,可以将服务映射到 externalName 字段的内容,没有任何类型代理被创建。这种类型需要v1.7版本或更高版本kube-dnsc才支持。

Service 使用label selectors来匹配一组Pod

Label可以在创建时或以后附加到对象上,可以随时修改。

kubectl get services

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080

kubectl get services

kubectl describe services/kubernetes-bootcamp

kubectl describe deployment/kubernetes-bootcamp

export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')

echo NODE_PORT=$NODE_PORT

curl ip:30092

kubernetes-bootcamp  NodePort    10.108.100.97  <none>        8080:30092/TCP

伸缩应用

如果伸缩需求是0,将会终止Deployment指定的所有Pod

Service集成了负载均衡器,可以将网络流量分配到Deployment暴露的所有Pod中。Service将使用Endpoints持续监控运行的Pod,以确保仅将流量分配到可用的Pod。

kubectl scale deployments/kubernetes-bootcamp --replicas=4

kubectl get deployments

kubectl get pods -o wide

有4个不同的服务在不同的pod

kubectl describe services/kubernetes-bootcamp

Endpoints:                172.18.0.2:8080,172.18.0.5:8080,172.18.0.6:8080 + 1 more...

每一个pod在一个node上有不同的ip 一个node可以有两个相同的pod但是ip不同

应用更新

滚动更新通过Deployments实现应用实例在不中断、不停机情况下更新,新的Pod会逐步调度到可用的资源Node节点上。

将应用从一个环境升级到另一个环境(通过容器镜像更新)

回滚到之前的版本

持续集成和持续交付应用的零停机

更新image

kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2

回滚

kubectl rollout status deployments/kubernetes-bootcamp

使用Minikube集群

Kubernetes集群

Master节点:协调控制整个集群。

Nodes节点:运行应用的工作节点。

node process 每个node有一个进程

Minikube CLI提供集群管理的基本操作,包括 start、stop、status、 和delete。

minikube version

minikube start

kubectl cluster-info

构建应用

docker build -t hello-node:v1 .

kubectl run hello-node --image=hello-node:v1 --port=8080

kubectl get deployments

minikube service hello-node

Kubernetes集群设计文档

Kubernetes 架构

Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。

Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。

Borg简介

Borg是谷歌内部的大规模集群管理系统

Kubernetes核心组件:

概念

通过Kubernetes你可以

快速部署应用

快速扩展应用

无缝对接新的应用功能

节省资源,优化硬件资源的使用

Google 10多年大规模容器管理技术Borg的开源版

组件

Master

kube-apiserver

etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。

节点(Node)

kube-proxy

kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象。

supervisord

supervisord是一个轻量级的监控系统,用于保障kubelet和docker运行。

Kubernetes对象

Object的配置:Object Spec和Object Status

Spec描述了对象所需的状态  Status描述了对象的实际状态,并由Kubernetes系统提供和更新。

Kubernetes Names

Kubernetes REST API中的所有对象都用Name和UID来明确地标识。

/api/v1/pods/some-name

Kubernetes Namespaces

Kubernetes可以使用Namespaces(命名空间)创建多个虚拟集群。

相同Namespace中的对象将具有相同的访问控制策略。

Kubernetes Volume

默认情况下容器中的磁盘文件是非持久化的

容器之间需要共享文件

对于Docker 1.7,每个容器只允许挂载一个Volume,并且不能将参数传递给Volume

Kubernetes Volume具有明确的生命周期 - 与pod相同。

Kubernetes支持许多类型的Volume,Pod可以同时使用任意类型/数量的Volume。

一个Volume只是一个目录,目录中可能有一些数据,pod的容器可以访问这些数据。

要使用Volume,pod需要指定Volume的类型和内容(spec.volumes字段),和映射到容器的位置(spec.containers.volumeMounts字段)。

Volume 类型

hostPath

hostPath允许挂载Node上的文件系统到Pod里面去。如果Pod需要使用Node上的文件,可以使用hostPath。

还有一些基于不同运行环境的磁盘

secret

secret volume用于将敏感信息(如密码)传递给pod。可以将secrets存储在Kubernetes API中,使用的时候以文件的形式挂载到pod中

Kubernetes Annotations

绑定用户信息

Node

conditions字段描述所有Running节点的状态。

OutOfDisk True:如果节点上没有足够的可用空间来添加新的pod;否则为:False

Ready True:如果节点是健康的并准备好接收pod;False:如果节点不健康并且不接受pod;Unknown:如果节点控制器在过去40秒内没有收到node的状态报告。

MemoryPressure True:如果节点存储器上内存过低; 否则为:False。

DiskPressure True:如果磁盘容量存在压力 - 也就是说磁盘容量低;否则为:False。

master和Kubernetes集群之间通信路径。

其目的是允许用户自定义安装,以增强网络配置,使集群可以在不受信任(untrusted)的网络上运行。

第一个是从apiserver到在集群中的每个节点上运行的kubelet进程。第二个是通过apiserver的代理功能从apiserver到任何node、pod或service 。

从apiserver到Node、Pod或Service的连接默认为HTTP连接,因此不需进行认证加密。也可以通过HTTPS的安全连接

pods

一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。

Kubernetes Replica Sets

ReplicaSet能确保运行指定数量的pod。

这意味着你可能永远不需要操作ReplicaSet对象,而是使用Deployment替代管理 。

Kubernetes Deployment

Kubernetes 垃圾收集

级联删除

Kubernetes kubectl 概述

涵盖了kubectl语法,对命令操作的描述,并列举的常见例子。

官方文档

https://www.kubernetes.org.cn/doc-45

kubectl [command] [TYPE] [NAME] [flags]

create,get,describe,set,delete

node pod service

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容