阅读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 服务会自动创建。通过请求 :,可以从集群的外部访问一个 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          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

你可能感兴趣的:(阅读Kubernetes文档总结)