KubernetesÊÇGoogle¿ªÔ´µÄÈÝÆ÷¼¯Èº¹ÜÀíϵͳ¡£Ëü¹¹½¨ÓÚdocker¼¼ÊõÖ®ÉÏ£¬ÎªÈÝÆ÷»¯µÄÓ¦ÓÃÌṩ×ÊÔ´µ÷¶È¡¢²¿ÊðÔËÐС¢·þÎñ·¢ÏÖ¡¢À©ÈÝËõÈݵÈÕûÒ»Ì×¹¦ÄÜ£¬±¾ÖÊÉϿɿ´×÷ÊÇ»ùÓÚÈÝÆ÷¼¼ÊõµÄmini-PaaSƽ̨¡£±¾ÎÄÖ¼ÔÚÊáÀíKubernetesµÄ¼Ü¹¹¡¢¸ÅÄî¼°»ù±¾¹¤×÷Á÷£¬²¢ÇÒͨ¹ýÔËÐÐÒ»¸ö¼òµ¥µÄʾÀýÓ¦ÓÃÀ´½éÉÜÈçºÎʹÓÃKubernetes¡£
ÈçÏÂͼËùʾÊÇÎÒ³õ²½ÔĶÁÎĵµºÍÔ´´úÂëÖ®ºóÕûÀíµÄ×ÜÌå¸ÅÀÀ£¬»ù±¾ÉÏ¿ÉÒÔ´ÓÈçÏÂÈý¸öά¶ÈÀ´ÈÏʶKubernetes¡£

²Ù×÷¶ÔÏó
KubernetesÒÔRESTFulÐÎʽ¿ª·Å½Ó¿Ú£¬Óû§¿É²Ù×÷µÄREST¶ÔÏóÓÐÈý¸ö£º
1.pod£ºÊÇKubernetes×î»ù±¾µÄ²¿Êðµ÷¶Èµ¥Ôª£¬¿ÉÒÔ°üº¬container£¬Âß¼ÉϱíʾijÖÖÓ¦ÓõÄÒ»¸öʵÀý¡£±ÈÈçÒ»¸öwebÕ¾µãÓ¦ÓÃÓÉǰ¶Ë¡¢ºó¶Ë¼°Êý¾Ý¿â¹¹½¨¶ø³É£¬ÕâÈý¸ö×é¼þ½«ÔËÐÐÔÚ¸÷×ÔµÄÈÝÆ÷ÖУ¬ÄÇôÎÒÃÇ¿ÉÒÔ´´½¨°üº¬Èý¸öcontainerµÄpod¡£
2.service£ºÊÇpodµÄ·ÓÉ´úÀí³éÏó£¬ÓÃÓÚ½â¾öpodÖ®¼äµÄ·þÎñ·¢ÏÖÎÊÌâ¡£ÒòΪpodµÄÔËÐÐ״̬¿É¶¯Ì¬±ä»¯(±ÈÈçÇл»»úÆ÷ÁË¡¢ËõÈݹý³ÌÖб»ÖÕÖ¹Á˵È)£¬ËùÒÔ·ÃÎʶ˲»ÄÜÒÔдËÀIPµÄ·½Ê½È¥·ÃÎʸÃpodÌṩµÄ·þÎñ¡£serviceµÄÒýÈëÖ¼ÔÚ±£Ö¤podµÄ¶¯Ì¬±ä»¯¶Ô·ÃÎʶË͸Ã÷£¬·ÃÎʶËÖ»ÐèÒªÖªµÀserviceµÄµØÖ·£¬ÓÉserviceÀ´Ìṩ´úÀí¡£
3.replicationController£ºÊÇpodµÄ¸´ÖƳéÏó£¬ÓÃÓÚ½â¾öpodµÄÀ©ÈÝËõÈÝÎÊÌ⡣ͨ³££¬·Ö²¼Ê½Ó¦ÓÃΪÁËÐÔÄÜ»ò¸ß¿ÉÓÃÐԵĿ¼ÂÇ£¬ÐèÒª¸´Öƶà·Ý×ÊÔ´£¬²¢ÇÒ¸ù¾Ý¸ºÔØÇé¿ö¶¯Ì¬ÉìËõ¡£Í¨¹ýreplicationController£¬ÎÒÃÇ¿ÉÒÔÖ¸¶¨Ò»¸öÓ¦ÓÃÐèÒª¼¸·Ý¸´ÖÆ£¬Kubernetes½«ÎªÃ¿·Ý¸´ÖÆ´´½¨Ò»¸öpod£¬²¢ÇÒ±£Ö¤Êµ¼ÊÔËÐÐpodÊýÁ¿×ÜÊÇÓë¸Ã¸´ÖÆÊýÁ¿ÏàµÈ(ÀýÈ磬µ±Ç°Ä³¸öpodå´»úʱ£¬×Ô¶¯´´½¨ÐµÄpodÀ´Ìæ»»)¡£
¿ÉÒÔ¿´µ½£¬serviceºÍreplicationControllerÖ»Êǽ¨Á¢ÔÚpodÖ®ÉϵijéÏó£¬×îÖÕÊÇÒª×÷ÓÃÓÚpodµÄ£¬ÄÇôËüÃÇÈçºÎ¸úpodÁªÏµÆðÀ´ÄØ£¿Õâ¾ÍÒªÒýÈëlabelµÄ¸ÅÄlabelÆäʵºÜºÃÀí½â£¬¾ÍÊÇΪpod¼ÓÉÏ¿ÉÓÃÓÚËÑË÷»ò¹ØÁªµÄÒ»×ékey/value±êÇ©£¬¶øserviceºÍreplicationControllerÕýÊÇͨ¹ýlabelÀ´Óëpod¹ØÁªµÄ¡£ÈçÏÂͼËùʾ£¬ÓÐÈý¸öpod¶¼ÓÐlabelΪ"app=backend"£¬´´½¨serviceºÍreplicationControllerʱ¿ÉÒÔÖ¸¶¨Í¬ÑùµÄlabel:"app=backend"£¬ÔÙͨ¹ýlabel
selector»úÖÆ£¬¾Í½«ËüÃÇÓëÕâÈý¸öpod¹ØÁªÆðÀ´ÁË¡£ÀýÈ磬µ±ÓÐÆäËûfrontend pod·ÃÎʸÃserviceʱ£¬×Ô¶¯»áת·¢µ½ÆäÖеÄÒ»¸öbackend
pod¡£

¹¦ÄÜ×é¼þ
ÈçÏÂͼËùʾÊǹٷ½ÎĵµÀïµÄ¼¯Èº¼Ü¹¹Í¼£¬Ò»¸öµäÐ͵Ämaster/slaveÄ£ÐÍ¡£

masterÔËÐÐÈý¸ö×é¼þ£º
1.apiserver£º×÷ΪkubernetesϵͳµÄÈë¿Ú£¬·â×°Á˺ËÐĶÔÏóµÄÔöɾ¸Ä²é²Ù×÷£¬ÒÔRESTFul½Ó¿Ú·½Ê½Ìṩ¸øÍⲿ¿Í»§ºÍÄÚ²¿×é¼þµ÷Óá£Ëüά»¤µÄREST¶ÔÏ󽫳־û¯µ½etcd£¨Ò»¸ö·Ö²¼Ê½Ç¿Ò»ÖÂÐÔµÄkey/value´æ´¢£©¡£
2.scheduler£º¸ºÔð¼¯ÈºµÄ×ÊÔ´µ÷¶È£¬ÎªÐ½¨µÄpod·ÖÅä»úÆ÷¡£Õⲿ·Ö¹¤×÷·Ö³öÀ´±ä³ÉÒ»¸ö×é¼þ£¬Òâζ×Å¿ÉÒԺܷ½±ãµØÌæ»»³ÉÆäËûµÄµ÷¶ÈÆ÷¡£
3.controller-manager£º¸ºÔðÖ´Ðи÷ÖÖ¿ØÖÆÆ÷£¬Ä¿Ç°ÓÐÁ½Àࣺ
endpoint-controller£º¶¨ÆÚ¹ØÁªserviceºÍpod(¹ØÁªÐÅÏ¢ÓÉendpoint¶ÔÏóά»¤)£¬±£Ö¤serviceµ½podµÄÓ³Éä×ÜÊÇ×îеġ£
replication-controller£º¶¨ÆÚ¹ØÁªreplicationControllerºÍpod£¬±£Ö¤replicationController¶¨ÒåµÄ¸´ÖÆÊýÁ¿Óëʵ¼ÊÔËÐÐpodµÄÊýÁ¿×ÜÊÇÒ»Öµġ£
slave(³Æ×÷minion)ÔËÐÐÁ½¸ö×é¼þ£º
1.kubelet£º¸ºÔð¹Ü¿ØdockerÈÝÆ÷£¬ÈçÆô¶¯/Í£Ö¹¡¢¼à¿ØÔËÐÐ״̬µÈ¡£Ëü»á¶¨ÆÚ´Óetcd»ñÈ¡·ÖÅäµ½±¾»úµÄpod£¬²¢¸ù¾ÝpodÐÅÏ¢Æô¶¯»òÍ£Ö¹ÏàÓ¦µÄÈÝÆ÷¡£Í¬Ê±£¬ËüÒ²»á½ÓÊÕapiserverµÄHTTPÇëÇ󣬻㱨podµÄÔËÐÐ״̬¡£
2.proxy£º¸ºÔðΪpodÌṩ´úÀí¡£Ëü»á¶¨ÆÚ´Óetcd»ñÈ¡ËùÓеÄservice£¬²¢¸ù¾ÝserviceÐÅÏ¢´´½¨´úÀí¡£µ±Ä³¸ö¿Í»§podÒª·ÃÎÊÆäËûpodʱ£¬·ÃÎÊÇëÇó»á¾¹ý±¾»úproxy×öת·¢¡£
¹¤×÷Á÷
ÉÏÎÄÒѾÌáµ½ÁËKubernetesÖÐ×î»ù±¾µÄÈý¸ö²Ù×÷¶ÔÏó£ºpod, replicationController¼°service¡£
ÏÂÃæ·Ö±ð´ÓËüÃǵĶÔÏó´´½¨³ö·¢£¬Í¨¹ýʱÐòͼÀ´ÃèÊöKubernetes¸÷¸ö×é¼þÖ®¼äµÄ½»»¥¼°Æä¹¤×÷Á÷¡£

ʹÓÃʾÀý
×îºó£¬ÈÃÎÒÃǽøÈëʵսģʽ£¬ÕâÀïÅÜÒ»¸ö×î¼òµ¥µÄµ¥»úʾÀý(ËùÓÐ×é¼þÔËÐÐÔÚһ̨»úÆ÷ÉÏ)£¬Ö¼ÔÚ´òͨ»ù±¾Á÷³Ì¡£
´î½¨»·¾³
µÚÒ»²½£¬ÎÒÃÇÐèÒªKuberntes¸÷×é¼þµÄ¶þ½øÖÆ¿ÉÖ´ÐÐÎļþ¡£ÓÐÒÔÏÂÁ½ÖÖ·½Ê½»ñÈ¡£º
ÏÂÔØÔ´´úÂë×Ô¼º±àÒ룺
git clone https://github.com/GoogleCloudPlatform/kubernetes.git cd kubernetes/build ./release.sh |
Ö±½ÓÏÂÔØÈ˼ÒÒѾ±àÒë´ò°üºÃµÄtarÎļþ£º
wget https://storage.googleapis.com/kubernetes/binaries.tar.gz |
×Ô¼º±àÒëÔ´ÂëÐèÒªÏȰ²×°ºÃgolang£¬±àÒëÍêÖ®ºóÔÚkubernetes/_output/release-tarsÎļþ¼ÐÏ¿ÉÒԵõ½´ò°üÎļþ¡£Ö±½ÓÏÂÔØµÄ·½Ê½²»ÐèÒª°²×°ÆäËûÈí¼þ£¬µ«¿ÉÄܵò»µ½×îеİ汾¡£
µÚ¶þ²½£¬ÎÒÃÇ»¹ÐèÒªetcdµÄ¶þ½øÖÆ¿ÉÖ´ÐÐÎļþ£¬Í¨¹ýÈçÏ·½Ê½»ñÈ¡£º
wget https://github.com/coreos/etcd/releases/download/v0.4.6/etcd-v0.4.6-linux-amd64.tar.gz
tar xvf etcd-v0.4.6-linux-amd64.tar.gz |
µÚÈý²½£¬¾Í¿ÉÒÔÆô¶¯¸÷¸ö×é¼þÁË£º
etcd
cd etcd-v0.4.6-linux-amd64 ./etcd |
apiserver
./apiserver \ -address=127.0.0.1 \ -port=8080 \ -portal_net="172.0.0.0/16" \ -etcd_servers=http://127.0.0.1:4001 \ -machines=127.0.0.1 \ -v=3 \ -logtostderr=false \ -log_dir=./log |
scheduler
./scheduler -master 127.0.0.1:8080 \ -v=3 \ -logtostderr=false \ -log_dir=./log |
controller-manager
./controller-manager -master 127.0.0.1:8080 \ -v=3 \ -logtostderr=false \ -log_dir=./log |
kubelet
./kubelet \ -address=127.0.0.1 \ -port=10250 \ -hostname_override=127.0.0.1 \ -etcd_servers=http://127.0.0.1:4001 \ -v=3 \ -logtostderr=false \ -log_dir=./log |
´´½¨pod
´îºÃÁËÔËÐл·¾³ºó£¬¾Í¿ÉÒÔÌá½»podÁË¡£Ê×ÏȱàдpodÃèÊöÎļþ£¬±£´æÎªredis.json£º
{ "id": "redis", "desiredState": { "manifest": { "version": "v1beta1", "id": "redis", "containers": [{ "name": "redis", "image": "dockerfile/redis", "imagePullPolicy": "PullIfNotPresent", "ports": [{ "containerPort": 6379, "hostPort": 6379 }] }] } }, "labels": { "name": "redis" } } |
È»ºó£¬Í¨¹ýÃüÁîÐй¤¾ßkubecfgÌá½»£º
./kubecfg -c redis.json create /pods |
Ìá½»Íêºó£¬Í¨¹ýkubecfg²é¿´pod״̬£º
# ./kubecfg list /pods ID Image(s) Host Labels Status ---------- ---------- ---------- ---------- ---------- redis dockerfile/redis 127.0.0.1/ name=redis Running |
StatusÊÇRunning±íʾpodÒѾÔÚÈÝÆ÷ÀïÔËÐÐÆðÀ´ÁË£¬¿ÉÒÔÓÃ"docker
ps"ÃüÁîÀ´²é¿´ÈÝÆ÷ÐÅÏ¢£º
# docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
ae83d1e4b1ec dockerfile/redis:latest "redis-server /etc/r 19 seconds ago Up 19 seconds
k8s_redis.caa18858_redis.default.etcd_1414684622_1b43fe35
|
´´½¨replicationController
{ "id": "redisController", "apiVersion": "v1beta1", "kind": "ReplicationController", "desiredState": { "replicas": 1, "replicaSelector": {"name": "redis"}, "podTemplate": { "desiredState": { "manifest": { "version": "v1beta1", "id": "redisController", "containers": [{ "name": "redis", "image": "dockerfile/redis", "imagePullPolicy": "PullIfNotPresent", "ports": [{ "containerPort": 6379, "hostPort": 6379 }] }] } }, "labels": {"name": "redis"} }}, "labels": {"name": "redis"} } |
È»ºó£¬Í¨¹ýÃüÁîÐй¤¾ßkubecfgÌá½»£º
./kubecfg -c redisController.json create /replicationControllers |
Ìá½»Íêºó£¬Í¨¹ýkubecfg²é¿´replicationController״̬£º
# ./kubecfg list /replicationControllers ID Image(s) Selector Replicas ---------- ---------- ---------- ---------- redisController dockerfile/redis name=redis 1 |
ͬʱ£¬1¸öpodÒ²½«±»×Ô¶¯´´½¨³öÀ´£¬¼´Ê¹ÎÒÃǹÊÒâɾ³ý¸Ãpod£¬replicationControllerÒ²½«±£Ö¤´´½¨1¸öÐÂpod¡£
|