Kubernetes学习(三)

z1.2 Kubernetes基本架构与常用术语

    Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。

Kubernetes主要核心组件:

        ectd:保存整个集群的状态;

        apiserver:提供资源操作的唯一入口,认证,授权,访问控制,API注册和发现等机制;

        controller manager:负责维护集群的状态,比如故障检测,自动扩展,滚动更新等;

        scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;

        kubelet:负责维护容器的生命周期,负责Volume(CVI)和网络(CNI)的管理;

        Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI);

        Kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡;

1.2.1 Cluster

    Cluster是计算、存储和网络资源的集合,Kubernetes利用这些资源运行各种基于容器的应用。

    kubernetes Cluster由Mater和Node组成,节点上运行着若干Kubernetes服务。

1.2.1 Master

    Kubernetes中的Master是一台运行Kubernetes的主机,可以是物理机也可以是虚拟机,它是Kubernetes集群中的控制节点,它负责完成整个Kubernetes集群的创建、管理和控制,在Kubernetes集群中必不可少。

我们默认只能在Master上使用kubectl工具完成Kubernetes具体的操作命令,如果Master宕机或是离线,我们所有的控制命令都会失效。因此Master非常重要,在生产环境中,Master一般会配置高可用集群服务解决其单点故障问题。

Kubernetes 1.4 开始Master上的关键服务都是以Docker 容器实例的方式运行的,包括etcd服务。具体服务和其功能如下:

Kubernetes API Server ( kube-apiserver),为kubernetes客户端提供HTTP Rest API接口的关键服务,是kubernetes中对象资源增、删、查、改等操作的唯一入口,同时也是kubernetes集群控制的入口。

Kubernetes Controller Manager ( kube-controller-manager),为Kubernetes提供统一的自动化控制服务。

Kubernetes Scheduler (kube-scheduler),为Kubernetes提供资源调度的服务,统一分配资源对象。

Etcd Server(etcd),为Kubernetes保存所有对象的键值对数据信息。

 1.2.2 Node

    在Kubernetes集群中,除了Master之外其它运行Kubernetes服务的主机称之为Node,在早期Kubernetes中称其为Minion。Node也可以是物理机或虚拟机。Node是Kubernetes集群中任务的负载节点,Master经过特殊设置后也可以作为Node负载任务。Kubernetes一般是由多个Node组成的,我们建议Node的数量是N+2的。

    Node节点通过kubelet服务向Master注册,可以实现动态的在Kubernetes集群中添加和删除负载节点。已加入Kubernetes集群中的Node节点还会通过kubelet服务动态的向Master提交其自身的资源信息。

1.2.3 Pod

    在Kubenetes中所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器。同一个Pod中的容器会部署在同一个物理机器上并且能够共享资源,Pod是Kubernetes的基本操作单元,把相关的一个或多个容器构成一个Pod,通常Pod里的容器运行相同的应用,在Kubernetes集群中,一个Pod中的容器可以和另一个Node上的Pod容器直接通讯。

1.2.4 Service

Kubernetes Service定义了外界访问一组特定Pod的方式,Service有自己的I和端口号,Service为Pod提供了负载均衡。

1.2.5 Replication Controller

    Replication Controller确保任何时候Kubernetes集群中有指定数量的Pod副本(replicas)在运行, 如果少于指定数量的Pod副本(replicas),Replication Controller会启动新的容器(Container),反之会杀死多余的以保证数量不变。Replication Controller使用预先定义的Pod模板创建pods,一旦创建成功,Pod模板和创建的Pod没有任何关联,可以修改Pod模板而不会对已创建Pod有任何影响。也可以直接更新通过Replication Controller创建的pod。对于利用pod模板创建的pod,Replication Controller根据标签选择器(Label Selector)来关联,通过修改Pod的Label可以删除对应的Pod。

Replication Controller的定义包含如下的部分:

Pod的副本数目(Replicas)

用于筛选Pod的标签选择器(Label Selector)

用于创建Pod的标准配置模板(Template)

1.2.6 Label

    Label用来给Kubernetes中的对象分组。Label通过设置键值对(key-value)方式在创建Kubernetes对象的时候附属在对象之上。一个Kubernetes对象可以定义多个Labels(key=value),并且key和value均由用户自己指定,同一组Label(key=value)可以指定到多个Kubernetes对象,Label可以在创建Kubernetes对象时设置,也可以在对象创建后通过kubectl或kubernetes api添加或删除。其他Kubernetes对象可以通过标签选择器(Label Selector)选择作用对象。你可以把标签选择器(Lebel Selector)看作关系查询语言(SQL)语句中的where条件限定词。

    Lable实现的是将指定的资源对象通过不同的Lable进行捆绑,灵活的实现多维度的资源分配、调度、配置和部署。


2. Kubernetes集群

2.1 Master

2.1.1 etcd

[root@dpan ~]# vim /usr/lib/systemd/system/etcd.service

[Unit] Description=Etcd Server After=network.target [Service] Type=simple WorkingDirectory=/var/lib/etcd/ EnvironmentFile=-/etc/etcd/etcd.conf # set GOMAXPROCS to number of processors ExecStart=/usr/bin/etcd Restart=on-failure [Install] WantedBy=multi-user.target

[root@dpan ~]# systemctl daemon-reload

[root@dpan ~]# systemctl  enable etcd.service

[root@dpan ~]# mkdir -p /var/lib/etcd/

[root@dpan ~]# systemctl start etcd.service

[root@dpan ~]# etcdctl cluster-health

member 8e9e05c52164694d is healthy: got healthy result from http://localhost:2379

cluster is healthy

2.1.2 apiserver 

vi /etc/kubernetes/apiserver

KUBE_API_ARGS="--storage-backend=etcd3 --etcd-servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --service-cluster-ip-range=169.169.0.0/16 --servicce-node-port-range=1-65535 --admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,DefaultStorageClass,ResourceQuota --logtostderr=true --log-dir=/var/log/kubernetes --v=2

[root@dpan ~]# systemctl enable kube-apiserver.service

[root@dpan ~]# systemctl start kube-apiserver

2.1.3  controller-manager 

vi /etc/kubernetes/controller-manager 

KUBE_CONTROLLER_MANAGER_ARGS="--master=http://192.168.0.23:8080 --logtostderr=true --log-dir=/var/log/kubernetes --v=2"

[root@dpan ~]# systemctl enable kube-controller-manager.service

[root@dpan ~]# systemctl start kube-controller-manager.service

2.1.4  scheduler

vi /etc/kubernetes/scheduler

KUBE_SCHEDULER_ARGS="--master=http://192.168.0.23:8080 --logtostderr=true --log-dir=/var/log/kubernetes --v=2" ~ KUBE_SCHEDULER_ARGS="--master=http://192.168.0.23:8080 --logtostderr=true --log-dir=/var/log/kubernetes --v=2" ~

[root@dpan ~]# systemctl enable kube-scheduler.service [root@dpan ~]# systemctl start kube-scheduler.service

2.2 Node

2.2.1 kubelet

vi /usr/lib/systemd/system/kubelet.service

[Unit] Description=Kubernetes Kubelet Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=docker.service Requires=docker.service [Service] WorkingDirectory=/var/lib/kubelet EnvironmentFile=-/etc/kubernetes/kubelet ExecStart=/usr/bin/kubelet $KUBELET_ARGS Restart=on-failure KillMode=process [Install] WantedBy=multi-user.target

mkdir /var/lib/kubelet

mkdir /etc/kubernetes

vi /etc/kubernetes/kubelet

KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig --hostname-override=192.168.0.24 --logtostderr=false --log-dir=/var/log/kubernetes --v=2 "

[root@epan ~]# vi /etc/kubernetes/kubeconfig 

[root@epan ~]# systemctl enable kubelet

[root@epan ~]# systemctl start kubelet

2.2.2  proxy 

vi /usr/lib/systemd/system/kube-proxy.service

[Unit] Description=Kubernetes Kube-Proxy Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=network.service Requires=network.service [Service] EnvironmentFile=-/etc/kubernetes/proxy ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS Restart=on-failure LimitNOFILE=65536 KillMode=process [Install] WantedBy=multi-user.target ~

[root@epan ~]# vi /etc/kubernetes/proxy

KUBE_PROXY_ARGS="--master=http://192.168.0.23:8080 --hostname-override=192.168.0.24 --logtostderr=true --log-dir=/var/log/kubernetes --v=2"

[root@epan ~]# systemctl enable kube-proxy

[root@epan ~]# systemctl start kube-proxy

2.2.3 Node启动

[root@epan ~]# systemctl daemon-reload

[root@epan ~]# systemctl enable kubelet

[root@epan ~]# systemctl start kubelet

[root@epan ~]# systemctl status kubelet

[root@epan ~]# systemctl enable kube-proxy

[root@epan ~]# systemctl start kube-proxy

[root@epan ~]# systemctl status kube-proxy

你可能感兴趣的:(Kubernetes学习(三))