首页 欧洲联赛 正文

改革春风吹满地,《基于kuberetes的容器云平台实战》读书笔记,明星排行榜

用户能够经过PaaS渠道完结运用的构建、布置、运维办理,而不需求自己建立核算履行环境。

IaaS 体系供给给用户的是虚拟机资源;

PaaS 担任运用的布置和运维,完成运用的弹性弹性和高可用等功用,用户只需专心于运用的开发。

要完成运用的自在弹性弹性,就需求运用做到无状况化,一切有状况的信息(如DB、Session等等)都要放到效劳节点上的资源池中。

容器的优点:

  • 供给资源阻隔,利用率提高;
  • 具有秒级弹性的才干;
  • 容器镜像技能,处理了包括运用及其依靠环境的共同性问题,简化事务交给流程。

Docker 技能:

1. 将运用和依靠的结构中间件等运转环境都打包到Docker 镜像,用户运用布置并运转在阻隔的Docker 容器中,不再依靠宿主机来供给运转环境支撑,然后完成了运用和PaaS渠道解耦;

2. 用户向PaaS 渠道提交的不再是代码,而是Docker 镜像,PaaS 渠道也无须再为运用预备各种运转时环境。

微效劳架构提高了运用的灵活性、扩展性和高可用性。

为什么需求 Kubernetes ?

实在的出产环境运用会包括多个容器,而这些容器还很可能会跨过多个效劳器主机布置。

Kubernetes 供给了大规模布置容器的编列与办理才干。Kubernetes 编列让你能够构建多容器的运用效劳,在集群上调度或弹性这些容器,以及办理它们随时刻改变的健康状况。

Kubernetes 也需求与网络、存储、安全、监控等其它效劳集成才干供给综合性的容器根底设施。

Kubernetes 供给了一个快捷、有用的PaaS 渠道,让用户能够在物理机和虚拟机集群上调度和运转 Docker 容器,能够协助用户在出产环境中彻底施行并依托根据容器的根底架构运营。

在Kubernetes 中创立、调度和办理的最小单位是Pod,而不是Docker 容器。

Service

Service 是一组协同作业的Pod,就像多层架构运用中的一层,是Pod 的路由署理笼统,用于处理Pod 之间的效劳发现问题。

Service 的引进旨在确保Pod的动态改变对拜访端通明,拜访端只需求知道Service的地址,由Service 来供给署理。

构成效劳的Pod 组经过Label 选择器来界说。

Kubernetes 经过给效劳分配静态 IP 地址和域名来供给效劳发现机制,而且以轮询调度的方法将流量负载均衡到能与选择器匹配的Pod上。

Node

每个Node节点主要由:Kubelet、kube-proxy、docker runtime 组成。

Master

主要由:API Server、Scheduler、Controller Manager、etcd 组成。

Kubernetes 集群

Kubernetes 办理节点是Kubernetes 集群的大脑。

Kubernetes 将Etcd 作为分布式装备存储,各种 Kubernetes 状况存储在 Etcd 中。

在Node 节点运转的Kubelet 效劳中内嵌了一个Advisor 效劳,Advisor 是Google 的别的一个开源项目,用于实时监控Docker 容器的性能指标。

Controller Manager 是一个操控器调集。在Kubernetes 集群中,每个操控器的中心作业原理是:每个操控器经过 API 效劳器检查体系的运转状况,并尝试着将体系状况从“现有状况”修正到“期望状况”。

调度器 -- 在整个调度进程中涉及到3个目标:待调度Pod列表、可用Node列表、以及调度算法和调度战略。

Kubernetes 作为容器运用的办理中心,对集群内部一切容器的生命周期进行办理。

Kubernetes Master 扮演总控中心的人物,其主要的3个效劳:kube-api server、kube-controller-manager和kube-scheduler 经过不断与作业节点上的kubelet和kube-proxy 进行通讯,来保护整个集群的健康作业状况。

在Kubernetes 中,健康检查监视器由Kubelet 署理。

Pod

Pod 是Kubernetes 的最基本操作单元,也是运用运转的载体,包括一个或多个密切相关的容器。

Kubectl

便是将用户的输入转化成对API 效劳器的REST API 调用,然后发起运程调用并输出调用成果。能够认为Kubectl 是API 效劳器的客户端东西。

busyboxpod.y高h辣文aml 示例pod:

apiVersion: v1

kind: Pod

metadata:

name: busyboxpod

spec:

containers:

- name: testpod

image: busybox

command:

- sleep

- "3600"

[root@centos-110 kubedemo]# kubectl create -f busyboxpod.y变革春风吹满地,《根据kuberetes的容器云渠道实战》读书笔记,明星排行榜aml

# 运用yaml 格局来显现Pod 的详细信息,或许 -o json 输出json格局

[root@centos-110 kubedemo]# kubectl get pod busyboxpod -o yaml

[root@centos-110 kubedemo]# kubectl get pods busyboxpod

NAME READY STATUS RESTARTS AGE

busyboxpod 0/1 Completed 0 20s

READY: 显现Pod 中容器信息;

/ 1: 右边的数字表明Pod 包括的容器总数;

0 /: 左面的数字表明预备就绪的容器数目;

Pod 的称号:metmidadata.name

Pod 的IP 地址:status.podIP

busyboxpod2.yaml 示例pod:

apiVersion: v1

kind: Pod

metadata:

name: busyboxpod2

spec:

containers:

- name: testpod

image: busybox

command:

- sleep

- "3600"

env:

- name: ENV_NAME

value: "rickie-pod"

- name: MY_POD_NAME

valueFrom:

field猫里奥下载Ref:

fieldPath: metadata.name

- name: MY_POD_IP

valueFrom:

fieldRef:

fieldPath: status.podIP

[root@centos-110 kubedemo]# kubectl exec -it busyboxpod2 /bin/sh

/ # printenv

KUBERNETES_SERVICE_PORT=443

KU变革春风吹满地,《根据kuberetes的容器云渠道实战》读书笔记,明星排行榜BERNETES_PORT=tcp://10.96.0.1:443

HOSTNAME=busyboxpod2

ENV_NAME=rickie-pod

.......

Pod 调度

指将创立好的Pod 分配到某一个Nupiaoode上。

Label

在Kubernetes 中,能够运用Label 键值对来标识附加到体系中的任何API 目标,如Pod、Service、Replication Controller等。

Replication Controller 演示

nginx-pod-rc.yaml 示例:

apiVersion: v1

kind: ReplicationController

metadata:

name: mynginxpod

spec:

replicas: 2

selector:

app: nginxpod // 经过这个标签找到生成的Pod

template:

metadata:

labels: // 界说标签

app: nginxpod // 键值对,这儿有必要和 selector 中界说的键值对相同

spec:

containers:

- image: nginx

name: nginx

ports:

- containerPort: 80

Kubernetes 经过 template 来生成Pod,创立完结后,template 和 Pod 就没有任何关系了。RC 经过 label 查找对应的Pod 并操控副本。

Pod 模板中的Label 不能为空,不然 Replication Controller 无法同 Pod 模板创立出来的Pod 进行相关。

[root@centos-110 kubedemo]# kubectl get pods --selector app=nginxpod

NAME READY STATUS RESTARTS AGE

mynginxpod-l2j5m 1/1 Running 0 2m

mynginxpod-lwc6x 1/1 Running 0 2m

[root@centos-110 kubedemo]# kubectl get pods --selector app=nginxpod --label-columns app

NAME READY STATUS RESTARTS AGE APP

mynginxpod-jsttr 1/1 Running 0 11s nginxpod

mynginxpod-lwc6x 1/1 Running 0 3m nginxpod

[root@centos-110 kubedemo]# kubectl get rc

NAME DESIRED CURRENT READY AGE

mynginxpod 2 2 2 10m

运用kubectl delete 指令删去 Replication Controller,默许会删去 Replication Controller 相关的一切Po变革春风吹满地,《根据kuberetes的容器云渠道实战》读书笔记,明星排行榜d 副本。

[root@centos-110 kubedemo]# kubectl delete rc mynginxpod

replicationcontroller "mynginxpod" deleted

[root@centos-110 kubedemo]# kubectl get pods --selector app=nginxpod --label-columns app

NAME READY STATUS RESTARTS AGE APP

mynginxpod-jsttr 1美女祭/1 Running 0 7m nginxpod

mynginxpod-lwc6x 1/1 Running 0 11m nginxpod

# 将Pod 的标签手艺修改为 app=rename

[root@centos-110 kubedemo]# kubectl label pod mynginxpod-jsttr app=rename --overwrit捕获半米巨虾e

pod "mynginxpod-jsttr" labeled

# 对RC沙赞而言,相关的Pod减少了一个,自然会触发创立新的Pod

[root@centos-110 kubedemo]# kubectl get pods --selector app=nginxpod --label-columns app

NAME READY STATUS RESTARTS AGE APP

myngi性虐小说nxpod-h75hb 1/1 Running 0 7s nginxpod

mynginxpod-lwc6x 1/1 Running 0 11m nginxpod

# 发现运转的Pod,有3个

[root@centos-110 kubedemo]# kubectl get pods --label-columns app

NAME READY STATUS RESTARTS AGE APP

mynginxpod-h75hb 1/1 Running 0 50s nginxpod

mynginxpod-jsttr 1变革春风吹满地,《根据kuberetes的容器云渠道实战》读书笔记,明星排行榜/1 Running 0 8m r变革春风吹满地,《根据kuberetes的容器云渠道实战》读书笔记,明星排行榜ename

mynginxpod-lwc6x 1/1 Running 0 12m nginxpod

[root@centos-110 kubedemo]# kubectl get pods --show-labels

# 扩容

[root@centos-110 kubedemo]# kubectl scale rc mynginxpod --replicas=5

replicationcontroller "mynginxpi社od" scaled

[ro吴敬琏专集ot@centos-110 kubedemo]# kubectl get rc

NAME DESIRED CURRENT READY AGE

mynginxpod 5 5 4 16m

# 缩容

[root@centos-110 kubedemo]# kubectl scale rc mynginxpod --replicas=1

replicationcontroller "mynginxpod" scaled

[root@centos-110 kubedemo]# kubectl get rc -o wide

NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR

mynginxpod 1 1 1 18m nginx nginx app=nginxpod

新一代副本操控器 ReplicaSet

ReplicaSet 引进了根据子集的Selec变革春风吹满地,《根据kuberetes的容器云渠道实战》读书笔记,明星排行榜tor 查询条件,而Replication Controller 仅支撑根据值持平的Selector 条件查询马桶c。

Horizontal Pod Autoscaler

在Kubernetes 中,经过Horizontal Pod Autoscaler 来完成Pod 的主动弹性。

Deployment

供给了一种愈加坚决的更新RS和Pod的机制。

# nginx-deployment-v1.yaml 演示文件

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2

kind: Deployment

metadata:

name: nginx-deployment

spec:

selector:

matchLabels:

app: nginx

replicas变革春风吹满地,《根据kuberetes的容器云渠道实战》读书笔记,明星排行榜: 2 # tells deployment to run 2 pods matching the templat上海富民专修学院e

template:

metadata:

labels:

app: nginx

spec:

containers:

- name: nginx

image: nginx:1.7.9

ports:

- containerPort: 80

[root@centos-110 kubedemo]# kubectl create -f nginx-deployment-v1.yaml

deployment.apps "nginx-deployment" created

[root@centos-110 kubedemo]# kubectl get deploy

NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE

nginx-deployment 2 2 2 2 12s

[root@centos-110 kubedemo]# kubectl get pods --show-labels

NAME READY STATUS RESTARTS AGE LABELS

nginx-deployment-75675f5897-jq28b 1/1 Running 0 2m app=nginx,pod-template-hash=3123191453

nginx-deployment-75675f5897-nk4pg 1/1 Running 0 2m app=nginx,pod-template-hash=3123191453

# 运用 --record选项是为了记载当时履行的指令所创立/更新的资源

# 即运用 --record 选项履行的deployment 都会被记载下来,用于今后检查每次deployment的细节

# 检查一切 deployment 的前史,或许回滚到某一前史版别。

[root@centos-110 kubedemo]# kubectl create -f nginx-deployment-v1.yaml --record

deployment.apps "nginx-deployment" created

[root@centos-110 kubedemo]# kubectl rollout history deployment/nginx-deployment

deployments "nginx-deployment"

REVISION CHANGE-CAUSE

1 kubectl create --filename=nginx-deployment-v1.yaml --record=true

[root@centos-110 kubedemo]# kubectl get deploy --show-labels

NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE LABELS

httpd 3 3 3 3 111d run=httpd

nginx-deployment 2 2 2 2 5m

# 将nginx 的版别进行晋级

[root@centos-110 kubedemo]# kubectl set image deployment/nginx-deployment nginx=nginx:1.8

deployment.apps "nginx-dep肾癌loyment" image updated

# 创立时加 --record 选项起的效果

[root@centos-110 kubedemo]# kubectl rollout history deployment/nginx-deployment

deployments "nginx-deployment"

REVISION CHANGE-CAUSE

1 kubectl create --filename=nginx-deployment-v1.yaml --record=true

2 kubectl set image deployment/nginx-deployment nginx=nginx:1.8

# 晋级回滚

[root@centos-110 kubedemo]# kubectl rollout undo deployment/nginx-deployment

deployment.apps "nginx-deployment"

# 查询详细信息,获取进展

[root@centos-110 kubedemo]# kubectl describe deploy nginx-deployment

# 检查 deployment 的改变信息

[root@cento玉龙雪山海拔s-110 kubedemo]# kubectl rollout history deployment/nginx-deployment

deployments "nginx-deployment"

REVISION CHANGE-CAUSE

2 kubectl set image deployment/nginx-deplo宋民国yment nginx=nginx:1.8

3 kubectl create --filename=nginx-deployment-v1.yaml --record=true

StatefulSet 与有状况的运用及分布式体系一同运用

StatefulSet 需求 Headless Servi闪电ce 担任Pod的网络共同性(有必要创立此效劳)

StatefulSet are stable (GA) in 1.9

[root@centos-110 kubedemo]# kubectl create -f statefulset-demo.yaml

service "nginx" created

statefulset.apps "my-web" created

# 验证

[root@centos-110 kubedemo]# kubectl get svc nginx

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

nginx ClusterIP None 80/TCP 1m

[root@centos-110 kubedemo]# kubectl get sts my-web

NAME DESIRED CURRENT AGE

my-web 2 2 1m

# StatefulSet 中的Pod 具有一个仅有的次序索引和安稳的网络身份标识

[root@centos-110 kubedemo]# kubectl get pods -l app=nginx

NAME READY STATUS RESTARTS AGE

my-web-0 1/1 Running 0 4m

my-web-1 1/1 Running 0 4m

# 扩容/缩容 StatefulSet

[roo老井t@centos-110 kubedemo]# kubectl scale sts my-web --replicas=4

statefulset.apps "my-web" scaled

[root@centos-110 kubedemo]# kubectl get pods -l app=nginx

NAME READY STATUS RESTARTS AGE

my-web-0 1/1 Running 0 8m

my-web-1 1/1 R面朝大海春暖花开unning 0 8m

my-web-2 1/1 Running 0 1m

my-web-3 1/1 Running 0 41s

[root@centos-110 kubedemo]# kubectl scale sts my-web --replicas=1

Pod在扩容、缩容时,会依照序号次序创立或Terminate。

# 能够经过 -w (watch)参数检查创立进程

[root@centos-111 .kube]# kubectl get pods -w -l app=nginx


IP-per-Pod 模型

Kubernetes 网络模型规划的一个根底准则:每个Pod 都具有一个独立的IP 地址,而且假定一切 Pod 都在一个能够直接连通的、扁平的网络空间中。

一个Pod 一个IP 的规划模型 -- IP-per-Pod 模型

Pod 能够看做一台独立的虚拟机或许物理机。

容器及Pod 间通讯

  • 同一个Pod 的容器同享同一个网络命名空间;
  • 同一个Node 中Pod的默许路由都是Docker0 的地址,因为它们相关在同一个Docker0 网桥上,地址网段相同,所以它们之间能够之间通讯;
  • 不同Node中Pod 间通讯 -- Docker0 网桥和宿主机网卡是两个彻底不同的IP 网段,而且Node 之间的通讯只能宿主机的物理网卡进行,因而想要坐落不同Node 上的Pod容器之间的通讯,就有必要想办法经过主机的IP 地址来进行寻址和通讯。

Kube-Proxy

是一个简略的网络署理和负载均衡器,它的效果主要是担任 Service的完成: 完成从Pod 到Service,以及从NodePort 向Service火锅英豪 的拜访。

DNS 效劳发现机制

kube-dns 用来为 Service 分配子域名,以便集群中的Pod 可经过DNS 域名获取 Service 的拜访地址。

Kubernetes 供给了一个DNS 插件 Service:

[root@centos-110 kubedemo]# kubectl get svc -n kube-system

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP 119d

# 经过CURL运用进行测验

# nslookup -- 用于查询DNS记载,检查域名解析是否正常

[root@centos-110 kubedemo]# kubectl run -it --image=radial/busyboxplus:curl curl --rm

If you don't see a command prompt, try pressing enter.

[ root@curl-775f9567b5-274ts:/ ]$ nslookup nginx

Server: 10.96.0.10

Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name: nginx

Address 1: 220.250.64.225

[ root@curl-775f9567b5-274ts:/ ]$ nslookup httpd-svc

Server: 10.96.0.10

Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name: httpd-svc

Address 1: 10.100.84.102 httpd-svc.default.svc.cluster.local

Headless 效劳

关于不想做负载均衡或许不期望有一个ClusterIP 时,能够创立一个Headless 类型的Service,将 spec.clusterIP 设置为 None。

关于这样的Service,体系不会为它们分配对应的IP。

Kubernetes 效劳

Service 是Kubernetes 最中心的概念,经过创立 Service,能够为一组具有相同功用的容器运用供给一个一致的进口地址,而且将恳求进行负载分发到后端的各个容器运用上。

集群中每个Node 节点都有一个组件kube-proxy,它实际上是为 Service 效劳的。

经过 kube-proxy,完成流量从 Service 到Pod的转发,kube-proxy 也能够完成简略的负载均衡功用。

完成方法: iptables 方法

选用 iptables 来完成 LB,是当时 kube-proxy 的默许方法。

相关推荐

  • 暂无相关文章