公式サイトをK8S:https://kubernetes.io/
K8S中国人コミュニティ:https://www.kubernetes.org.cn/
Googleがいくつかのエンジニアが発表された最初の時間のために2014年6月に設立しました。深く内部グーグルのK8S開発が影響ボルグのシステムと呼ばれる、ボルグGoogleの内部システムは、大規模なコンテナのレイアウトツールの10年間で安定した動作です。Googleは、ボルグシステムの考え方を次のGO言語で、この容器のスケジューリングツールを再構築し、K8S命名します。
あなたはこの概念コンテナのレイアウトツールに関するいくつかの疑問を持っているかもしれないここで、あなたが基準のvCenter VMwareが理解できる、コンテナのスケジューリングツールは、単にスケジューリングや、コンテナとコンテナクラスタの管理、範囲が含まれるコンテナのノード配置を、配置を作成、リソースの制約、ネットワークおよびルーティング、ストレージ管理、自動スケーリング、アウトのその後など、負荷分散
-
-
伸縮性:平均値が80%以上、コンテナの数の増加がある場合、この平均数は、容器内の10%未満の減少がある場合に、コンテナを監視することによってCPU負荷値
-
サービスと負荷分散の自動検出:なじみのないサービス発見メカニズムを使用するようにアプリケーションを変更する必要はありませんが、Kubernetesは、単一のDNS名に独自のIPアドレスとコンテナへのコンテナのセットを提供し、かつそれらの間にロードすることができますバランス。
-
そして、ローリング・アップグレードキーロールバック:アプリケーションへのか、それは同時にすべてのインスタンスを終了していないことを確認するために、アプリケーションの状態を監視しながらKubernetes徐々に展開構成の変更。問題が発生した場合、Kubernetesはあなたの履歴書に変わり、成長しているエコシステムの展開ソリューションを活用します。
-
プライベートプロファイル管理
コアコンポーネントに加えて、いくつかの推奨アドオンがあります。
説明 | |
ドームDNS | DNSは、クラスタ全体のサービスを提供する責任があります |
イングレス・コントローラ | ネットワークの入り口外部のサービスプロバイダの場合 |
Heapster | リソース監視を提供 |
計器盤 | Webインターフェイスは、GUI K8Sを提供します |
フェデレーション | これは、利用可能な領域を横切ってクラスタを提供します |
Fluentd-elasticsearch |
-
-
Controlle Manager (kube-controller-manager):kubernets 里面所有资源对象的自动化控制中心,可以理解为资源对象的大总管;
-
Scheduler (kube-scheduler):负责资源调度(pod调度)的进程,相当去公交公司的‘调度室’;
-
Etcd:用于持久化存储集群中所有的资源对象
-
-
kube-proxy:实现K8S Service的通信与负载均衡机制的重要组件;
-
Docker Engine:Docker引擎,
-
-
此时Controller Manager通过API Server的监听资源变化的接口监听到这个RC事件,分析之后,发现当前集群中还没有它所对应的Pod实例,于是根据RC里的Pod模板定义生成一个Pod对象,通过API Server写入etcd;
-
接下来,此事件被Scheduler发现,它立即执行一个复杂的调度流程,为这个新Pod选定一个落户的Node,然后通过API Server将这一结果写入到etcd中;
-
随后,目标Node上运行的Kubelet进程通过API Server监测到这个“新生的”Pod,并按照它的定义,启动该Pod并任劳任怨地负责它的下半生,直到Pod的生命结束。
-
随后,通过Kubectl提交一个新的映射到该Pod的Service的创建请求;
-
Controller Manager会通过Label标签查询到相关联的Pod实例,然后生成Service的Endpoints信息,并通过API Server写入到etcd中;
-
-
-
ReplicaSet (副本集):它不直接使用,由一个声明式更新的控制器叫Deployment来负责管理,但是Deployment只能负责管理那些无状态的应用。
-
StatefulSet (有状态副本集):负责管理有状态的应用。
-
DaemonSet:如果需要在每一个Node上只运行一个副本,而不是随意运行,就需要DaemonSet。
-
job运行作业,对于时间不固定的操作,比如:某个应用生成了一大堆数据集,现在需要临时启动一个Pod去清理这些数据集,清理完成后,这个Pod就可以结束了。 这些不需要一直处于运行状态的应用,就用Job这个类型的控制器去控制。如果Pod运行过程中意外中止了,Job负责重启Pod。如果Pod任务执行完了,就不需要再启动了。
-
Cronjob
RC中selector设置一个label,去关联pod的label,selector的label与pod的label相同,那么该pod就是该rc的一个实例。
RC中Replicas设置副本数大小,系统根据该值维护pod的副本数。
Replicaset在继承Pod的所有特性的同时, 它可以利用预先创建好的模板定义副本数量并自动控制, 通过改变Pod副本数量实现Pod的扩容和缩容。
缺点
Pod网络:专用于Pod资源对象的网络,它是一个虚拟网络,用于为各Pod对象设定IP地址等网络参数,其地址配置在Pod中容器的网络接口上。Pod网络需要借助kubenet插件或CNI插件实现
Service
ip地址 | 节点 | |
k8s-master | 10.0.0.11 | master |
k8s-node-1 | 10.0.0.12 | node-1 |
k8s-node-2 | 10.0.0.13 |
#所有主机进行解析 10.0.0.11 k8s-master 10.0.0.12 k8s-node-1 10.0.0.13 k8s-node-2
yum install etcd -y vim /etc/etcd/etcd.conf 6行:ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" 21行:ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379" systemctl start etcd.service systemctl enable etcd.service etcdctl set testdir/testkey0 0 etcdctl get testdir/testkey0 etcdctl -C http://10.0.0.11:2379 cluster-health
etcd原生支持做集群
yum install kubernetes-master.x86_64 -y vim /etc/kubernetes/apiserver 8行: KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" 11行:KUBE_API_PORT="--port=8080" 14行: KUBELET_PORT="--kubelet-port=10250" 17行:KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379" 23行:KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" vim /etc/kubernetes/config 22行:KUBE_MASTER="--master=http://10.0.0.11:8080" systemctl enable kube-apiserver.service systemctl restart kube-apiserver.service systemctl enable kube-controller-manager.service systemctl restart kube-controller-manager.service systemctl enable kube-scheduler.service systemctl restart kube-scheduler.service
检查服务是否安装正常
[root@k8s-master ~]# kubectl get componentstatus NAME STATUS MESSAGE ERROR scheduler Healthy ok controller-manager Healthy ok etcd-0 Healthy {"health":"true"}
yum install kubernetes-node.x86_64 -y vim /etc/kubernetes/config 22行:KUBE_MASTER="--master=http://10.0.0.11:8080" vim /etc/kubernetes/kubelet 5行:KUBELET_ADDRESS="--address=0.0.0.0" 8行:KUBELET_PORT="--port=10250" 11行:KUBELET_HOSTNAME="--hostname-override=10.0.0.12" 14行:KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080" systemctl enable kubelet.service systemctl restart kubelet.service systemctl enable kube-proxy.service systemctl restart kube-proxy.service
在master节点检查
[root@k8s-master ~]# kubectl get nodes NAME STATUS AGE 10.0.0.12 Ready 6m 10.0.0.13 Ready 3s
yum install flannel -y sed -i 's#http://127.0.0.1:2379#http://10.0.0.11:2379#g' /etc/sysconfig/flanneld ##master节点: etcdctl mk /atomic.io/network/config '{ "Network": "172.18.0.0/16" }' yum install docker -y systemctl enable flanneld.service systemctl restart flanneld.service systemctl restart docker systemctl enable docker systemctl restart kube-apiserver.service systemctl restart kube-controller-manager.service systemctl restart kube-scheduler.service ##node节点: systemctl enable flanneld.service systemctl restart flanneld.service systemctl restart docker systemctl restart kubelet.service systemctl restart kube-proxy.service vim /usr/lib/systemd/system/docker.service #在[Service]区域下增加一行,作用让主机之间可以连通 ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT systemctl daemon-reload systemctl restart docker
#所有节点 vi /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"], "insecure-registries": ["10.0.0.11:5000"] } systemctl restart docker #master节点 docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry