±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcnblogs£¬½éÉÜÁËDockerµÄ¼Ü¹¹£¬Docker¸ÅÄÃüÃû¿Õ¼ä½éÉÜ£¬DockerʾÀýµÈ¡£ |
|
DockerºÍKubernetesµÄ¹ØÏµ¾ÍÈçXenÓëOpenStack¡£
DockerÊÇÒ»ÖÖÈÝÆ÷¼¼Êõ£¬ºÍHypervisor£¨KVM/XenÕâÀࣩ²»Í¬µÄÊÇ£¬Docker²»»áÌṩһÕû¸ö²Ù×÷ϵͳ£¬ËûÄÜÌṩ¸ôÀëµÄ³ÌÐòÔËÐл·¾³¡£¶ÔÒ»¸öÓ¦ÓÃÀ´ËµÕâÒѾ¹»ÁË¡£
KubernetesÊÇGoogleµÄÒ»¸ö¿ªÔ´ÈÝÆ÷¹ÜÀíÏîÄ¿£¬ËûÄÜÀûÓÃDocker/ÆäËû¼¼Êõ²¿Êð/¹ÜÀíÈÝÆ÷¼¯Èº¡£
Docker
ÏîÄ¿µØÖ·£ºhttps://www.docker.com/
Docker ÊÇÒ»¸ö¿ªÔ´µÄÓ¦ÓÃÈÝÆ÷ÒýÇæ£¬Èÿª·¢Õß¿ÉÒÔ´ò°üËûÃǵÄÓ¦ÓÃÒÔ¼°ÒÀÀµ°üµ½Ò»¸ö¿ÉÒÆÖ²µÄÈÝÆ÷ÖУ¬È»ºó·¢²¼µ½ÈκÎÁ÷ÐеÄ
Linux »úÆ÷ÉÏ£¬ÓëKVMÕâÀ೬¼¶µ×²ãÐéÄ⻯·½°¸Ïà±È£¬DockerÊÇÒ»ÖÖÇáÁ¿¼¶ÐéÄ⻯·½°¸£¬Ëû²»ÐèÒª¶ÔÄں˽øÐиı䣬ËûÖ÷ÒªÀûÓÃlinuxÄÚºËÌØÐÔʵÏÖÐéÄ⻯£¬ËùÓÐÈÝÆ÷ÔËÐÐÔÚͬһ¸öÄÚºËÖС£ÁíÍ⣬docker»¹¿ÉÒÔ²¿ÊðÔÚKVM/XENÕâÀàÐéÄâ»úÖУ¡
ÈÝÆ÷ÓëÐéÄâ»ú¶Ô±ÈÈçÏÂͼ¡£
DockerµÄ¼Ü¹¹
DockerʹÓÿͻ§¶Ë-·þÎñÆ÷(client-server)¼Ü¹¹Ä£Ê½¡£Docker¿Í»§¶Ë»áÓëDockerÊØ»¤½ø³Ì½øÐÐͨÐÅ¡£DockerÊØ»¤
½ø³Ì»á´¦Àí¸´ÔÓ·±ÖصÄÈÎÎñ£¬ÀýÈ罨Á¢¡¢ÔËÐС¢·¢²¼ÄãµÄDockerÈÝÆ÷¡£Docker¿Í»§¶ËºÍÊØ»¤½ø³Ì¿ÉÒÔÔËÐÐÔÚͬһ¸öϵͳÉÏ£¬µ±È»ÄãÒ²¿ÉÒÔʹÓÃ
Docker¿Í»§¶ËÈ¥Á¬½ÓÒ»¸öÔ¶³ÌµÄDockerÊØ»¤½ø³Ì¡£Docker¿Í»§¶ËºÍÊØ»¤½ø³ÌÖ®¼äͨ¹ýsocket»òÕßRESTful
API½øÐÐͨÐÅ¡£
DockerÖØÒª¸ÅÄî
¾µÏñ£¨Image£©
Docker¾µÏñÊÇÒ»¸öÖ»¶ÁµÄÄ£°å¡£¾Ù¸öÀý×Ó£¬Ò»¸ö¾µÏñ¿ÉÒÔ°üº¬Ò»¸öÔËÐÐÔÚApacheÉϵÄWebÓ¦ÓÃºÍÆäʹÓõÄUbuntu²Ù×÷ϵͳ¡£¾µÏñÊÇÓÃÀ´´´½¨ÈÝÆ÷µÄ¡£DockerÌṩÁ˼òµ¥µÄ£¬ÄãÒ²¿ÉÒÔÏÂÔØ±ðÈËÒѾ´´½¨ºÃµÄ¾µÏñ¡£
²Ö¿â£¨Image£©
Docker²Ö¿âÓÃÀ´±£´æ¾µÏñ¡£ÆäÏ൱ÓÚÒ»¸ö´úÂë²Ö¿â£¬Í¬ÑùµÄ£¬Docker²Ö¿âÒ²Óй«ÓкÍ˽ÓеĸÅÄî¡£¹«ÓеÄDocker²Ö¿âÃû×ÖÊÇDocker
Hub¡£Ò²¿ÉÒÔ×Ô¼º´´½¨²Ö¿â¡£
ÈÝÆ÷£¨Container£©
Ò»¸öDockerÈÝÆ÷°üº¬ÁËij¸öÓ¦ÓÃÔËÐÐËùÓеÄËùÐèÒªµÄ»·¾³¡£Ã¿Ò»¸öDockerÈÝÆ÷¶¼ÊÇ´ÓDocker¾µÏñ´´½¨
µÄ¡£DockerÈÝÆ÷¿ÉÒÔÔËÐС¢¿ªÊ¼¡¢Í£Ö¹¡¢Òƶ¯ºÍɾ³ý¡¢±£´æÎª¾µÏñ¡£Ã¿Ò»¸öDockerÈÝÆ÷¶¼ÊǶÀÁ¢ºÍ°²È«µÄÓ¦ÓÃÆ½Ì¨¡£
DockerÄÚ²¿²ÉÓÃLinuxµÄÃüÃû¿Õ¼ä»úÖÆÊµÏÖ¸ôÀëÐÔ£¬²ÉÓÃcgroupʵÏÖ×ÊÔ´µÄ»®·Ö£¨ÀýÈç¸øÈÝÆ÷»®·Ö2GÄÚ´æ¡¢0.5¸öcpu£©¡£
¸ôÀë-ÃüÃû¿Õ¼ä½éÉÜ
ÃüÃû¿Õ¼äÊÇΪ²Ù×÷ϵͳ²ãÃæµÄÐéÄ⻯»úÖÆÌṩ֧³Å£¬Ä¿Ç°ÊµÏÖµÄÓÐÁùÖÖ²»Í¬µÄÃüÃû¿Õ¼ä£¬·Ö±ðΪmountÃüÃû¿Õ¼ä¡¢UTSÃüÃû¿Õ¼ä¡¢IPCÃüÃû¿Õ¼ä¡¢Óû§ÃüÃû¿Õ¼ä¡¢PIDÃüÃû¿Õ¼ä¡¢ÍøÂçÃüÃû¿Õ¼ä¡£ÃüÃû¿Õ¼ä¼òµ¥À´ËµÌṩµÄÊǶÔÈ«¾Ö×ÊÔ´µÄÒ»ÖÖ³éÏ󣬽«×ÊÔ´·Åµ½²»Í¬µÄÈÝÆ÷ÖУ¨²»Í¬µÄÃüÃû¿Õ¼ä£©£¬¸÷ÈÝÆ÷±Ë´Ë¸ôÀë¡£ÃüÃû¿Õ¼äÓеϹÓвã´Î¹ØÏµ£¬ÈçPIDÃüÃû¿Õ¼ä£¬Í¼
ΪÃüÃû¿Õ¼äµÄ²ã´Î¹ØÏµÍ¼¡£¿ÉÒÔ¼òµ¥Àí½âΪÏñC++£¬javaÄÇÑùµÄÃüÃû¿Õ¼ä¡£
×ÊÔ´»®·Ö-cgroup½éÉÜ
cgroup¾ÍÊÇcontroller group£¬×î³õÓÉgoogleµÄ¹¤³ÌʦÌá³ö£¬ºóÀ´±»ÕûºÏ½øLinuxÄÚºËÖУ¬ËüΪLinuxÄÚºËÌṩÁËÒ»ÖÖÈÎÎñ¾Û¼¯ºÍ»®·ÖµÄ»úÖÆ£¬Í¨¹ýÒ»×é²ÎÊý¼¯ºÏ½«Ò»Ð©ÈÎÎñ×éÖ¯³ÉÒ»¸ö»ò¶à¸ö×Óϵͳ¡£
cgroupÄÜÏÞ֯ij¸ö»òÕßijЩ½ø³ÌµÄ·ÖÅä×ÊÔ´¡£Ò²¾ÍÊÇÄÜÍê³ÉÒ»×éÈÝÆ÷µÄ¸ÅÄÔÚÕâ¸öÈÝÆ÷ÖУ¬ÓзÖÅäºÃµÄÌØ¶¨±ÈÀýµÄcpuʱ¼ä£¬IOʱ¼ä£¬¿ÉÓÃÄÚ´æ´óСµÈ¡£CgroupsÊÇʵÏÖIaaSÐéÄ⻯(kvm¡¢lxcµÈ)£¬PaaSÈÝÆ÷ɳÏä(DockerµÈ)µÄ×ÊÔ´¹ÜÀí¿ØÖÆ²¿·ÖµÄµ×²ã»ù´¡¡£
×ÓϵͳÊǸù¾Ýcgroup¶ÔÈÎÎñµÄ»®·Ö¹¦Äܽ«ÈÎÎñ°´ÕÕÒ»ÖÖÖ¸¶¨µÄÊôÐÔ»®·Ö³ÉµÄÒ»¸ö×飬Ö÷ÒªÓÃÀ´ÊµÏÖ×ÊÔ´µÄ¿ØÖÆ¡£ÔÚcgroupÖУ¬»®·Ö³ÉµÄÈÎÎñ×éÒÔ²ã´Î½á¹¹µÄÐÎʽ×éÖ¯£¬¶à¸ö×ÓϵͳÐγÉÒ»¸öÊý¾Ý½á¹¹ÖÐÀàËÆ¶à¸ùÊ÷µÄ½á¹¹¡£cgroup°üº¬Á˶à¸ö¹ÂÁ¢µÄ×Óϵͳ£¬Ã¿Ò»¸ö×Óϵͳ´ú±íµ¥Ò»µÄ×ÊÔ´¡£
DockerʾÀý
ÔÚ°²×°dockerÖ®ºó£¬ÔËÐÐÆäÊØ»¤½ø³Ì£¬È»ºó¾Í¿ÉÒÔʹÓÃdocker´´½¨ÔËÐÐÈÝÆ÷¡£°²×°docker¿ÉÒÔ°Ù¶Èһϡ£
ÔËÐÐdockerÃüÁÏÔʾÐÅÏ¢¾Í±íʾ°²×°³É¹¦¡£×îºÃÄÚºËÊÇ3.8ÒÔºóµÄ¡£
1. ²ÉÓÃdocker pullÃüÁî´Ó¹«¹²¿âÖÐÀÈ¡£¨ÏÂÔØ£©Ò»¸ö¾µÏñµ½ÎҵĵçÄÔÉÏ¡£
2. ²ÉÓÃdocker runÃüÁ¿ÉÒÔÖ¸¶¨Ò»¸ö¾µÏñ×÷Ϊ»ù´¡ÔËÐÐÈÝÆ÷¡£ ÎÒÕâÀïÖ¸¶¨ÁËubuntu¾µÏñ£¬ÒòΪÎÒµçÄÔÖÐûÓÐubuntu¾µÏñ£¬Ëû»á×Ô¶¯´Ó¹«¹²²Ö¿âÏÂÔØubuntuµÄ¾µÏñ¡£×ÐÏ¸ÇÆµÄ»°£¬¿ÉÒÔ¿´³öÎÒ½øÈëÁ˸ÃÈÝÆ÷µÄbash³ÌÐò¡£
3. ÊäÈëdocker images£¬¿ÉÒԲ鿴Ö÷»úÉÏ´æ´¢µÄ¾µÏñ¡£
DockerÒ²ÌṩÁ˺ܶ෽±ãµÄÃüÁî¶Ô¾µÏñ½øÐвÙ×÷¡£
kubernetes
ÏîÄ¿Ö÷Ò³£ºhttp://kubernetes.io/
docker½öÄÜÔÚµ¥»úÉϲ¿ÊðÈÝÆ÷£¬¶økubernetes¿ÉÒÔͳһ¹ÜÀí¸÷ÀàÈÝÆ÷£¬Ðγɼ¯Èº¡£Kubernetes×÷ΪDockerÉú̬ȦÖÐÖØÒªÒ»Ô±£¬ÊÇGoogle¶àÄê´ó¹æÄ£ÈÝÆ÷¹ÜÀí¼¼ÊõµÄ¿ªÔ´°æ±¾¡£KubernetesÖ§³ÖGCE¡¢vShpere¡¢CoreOS¡¢AzureµÈƽ̨£¬Ò²¿ÉÒÔÖ±½ÓÔËÐÐÔÚÎïÀí»úÉÏ¡£
Kubernetes·Ç³£ÊʺÏ×ö΢·þÎñµÄ¼Ü¹¹¡£
ÆäÖ÷Òª¹¦ÄÜÈçÏ£º
1) Óû§²»ÐèÒª¹ØÐÄÐèÒª¶àÉŲ̀»úÆ÷£¬Ö»ÐèÒª¹ØÐÄÈí¼þ£¨·þÎñ£©ÔËÐÐËùÐèµÄ»·¾³¡£ÒÔ·þÎñΪÖÐÐÄ£¬ÄãÐèÒª¹ØÐĵÄÊÇapi£¬ÈçºÎ°Ñ´ó·þÎñ²ð·Ö³ÉС·þÎñ£¬ÈçºÎʹÓÃapiÈ¥ÕûºÏËüÃÇ¡£
2) ÒÔ¼¯ÈºµÄ·½Ê½ÔËÐйÜÀíÈÝÆ÷¡£
3) ½â¾öDocker¿ç»úÆ÷ÈÝÆ÷Ö®¼äµÄͨѶÎÊÌâ¡£
4) KubernetesµÄPods×ÔÎÒÐÞ¸´»úÖÆÊ¹µÃÈÝÆ÷¼¯Èº×ÜÊÇÔËÐÐÔÚÓû§Ö¸¶¨µÄ״̬¡£
KubernetesÓм¸¸öÖØÒªµÄ¸ÅÄ
1. Pod
KubernetesµÄÈÝÆ÷¹ÜÀíµÄ×îСµ¥Î»²»ÊÇÈÝÆ÷£¬Ã²ËÆËµµÄºÜ±ðŤ¡£ ¾ÍÊÇÈÝÆ÷²¢²»ÊÇKubernetes¹ÜÀíµÄ×îСµ¥Ôª£¬¶øÊÇPods£¬
Ò»¸öPod°üº¬Ò»¸ö»òÕß¶à¸öÈÝÆ÷¡£ÀýÈçÒ»¸öС³ÌÐòÓÐÊý¾Ý¿âºÍºǫ́³ÌÐò£¬¿ÉÒÔ·Ö±ð·Åµ½Ò»¸öÈÝÆ÷ÀïÃæ£¬ÕâÁ½¸öÈÝÆ÷×é³ÉÒ»¸öPods¡£
PodµÄYAML ÃèÊö·½Ê½:
ÔËÐÐÈçÏÂÃüÁî¾Í»á´´½¨Pod:
kubectl create -f ./hello-world.yaml
ÔËÐÐÈçÏÂÃüÁî¾Í»á²é¿´Pod״̬:
$ kubectl get pods
2. minion/node
minionºÍnodeµÄÒâ˼ÊÇÒ»ÑùµÄ£¬ÊÇÒ»¸öÖ÷»ú½ÚµãµÄÒâ˼¡£ÀýÈçÒ»¸öÐéÄâ»ú¡¢Ò»¸öÎïÀíÖ÷»ú¡£×¢Ò⣬һ¸öPod²»»á¿çÔ½node¡£¾ÍÊǼ´Ê¹Ò»¸öPodÓжà¸öÈÝÆ÷£¬ÀïÃæµÄÈÝÆ÷»áͬʱ´æÔÚÔÚͬһ¸öNodeÖУ¬²»»á·Ö±ðÔÚ²»Í¬µÄNodeÖС£
KubernetesµÄµ÷¶ÈÆ÷»á¸ù¾ÝPodµÄ×ÊÔ´ÐèÇó¶¨ÒåÀ´½«Pod·ÖÅäµ½²»Í¬µÄNodeÖУ¨Èç½ñÖ§³Ö¶¨ÒåCPUÐèÇó¡¢ÄÚ´æÐèÇ󣩡£KubernetesµÄmaster/slave³ÌÐòÔËÐÐÔÚnodeÀïÃæ¡£
3. Replication Controller
Replication ÊǸ´ÖƵÄÒâ˼£¬ÓÃÀ´½â¾öPodµÄÏßÐÔÀ©ÈÝËõÈÝÎÊÌ⣬Replication Controller¿ÉÒÔ´´½¨Ò»¸öpodµÄ¶à¸ö¸±±¾£¬²¢ÇÒ¿ÉÒÔ±£Ö¤¼¯ÈºÖиÃPodµÄ¸±±¾ÊýÁ¿±£³Öƽºâ¡£ÀýÈ縱±¾ÊýÁ¿¹æ¶¨Îª10£¬Èç¹ûij¸öpod¹ÒÁË£¬ÊýÁ¿±äΪ9£¬ÄÇôReplication
Controller»á×Ô¶¯´´½¨Ò»¸öPod£¬»Ö¸´µ½10¸ö¸±±¾µÄˮƽ¡£ ¶à¸ö¸±±¾¿ÉÒÔÔÚ²»Í¬µÄNodeÖС£
Replication ControllerµÄYAML ÃèÊö·½Ê½:
replicas±íʾ¸±±¾µÄÊýÁ¿
templateÊǶÔPodµÄÃèÊö¡£ReplicationController¸ù¾Ýtemplate´´½¨¶à¸öPod£¨ÊýÁ¿=replicas£©£¬±êǩΪapp:
nginx¡£
ÔËÐÐÈçÏÂÃüÁî¾Í»á´´½¨Replication Controller:
kubectl create -f ./nginx-rc.yaml
4. Service
ServiceÓÃÀ´½â¾öPodµÄ·þÎñ·¢ÏÖÎÊÌ⣬ÒòΪPodµÄÔËÐÐ״̬¿ÉÒÔ¶¯Ì¬±ä»¯£¨»úÆ÷Çл»¡¢å´»ú£©£¬ËùÒÔ·ÃÎʶË×îºÃ²»ÒªÖ±½ÓÈ¥·ÃÎÊij¸öPod£¬¶øÊÇͨ¹ýservice£¬serviceÄܹ»½«ÇëÇó½øÐÐת·¢¡£
·þÎñµÄYAMLÃèÊöÈçÏ£º
¸Ã¶¨Òå´´½¨ÁËÒ»¸ö·þÎñ£¬»á½«±êǩΪapp:nginx£¨selectorÑ¡µÄ£©µÄPodÄÉÈë·þÎñÖУ¬Ò²¾ÍÊÇ˵¸Ã·þÎñ½ÓÊÕµ½µÄÇëÇó»áת·¢¸ø±êǩΪapp:
nginxµÄPod´¦Àí¡£×¢Ò⣺serviceÊǸºÔؾùºâµÄ£¬»á×Ô¶¯·ÖÅäÇëÇó¸ø²»Í¬µÄPod¡£ÓÐûÓоõµÃºÜ·½±ã£¿°ÑSerivce±©Â¶¸ø¿Í»§¶Ë£¬¿Í»§¶ËÖ»ÐèÒªÇëÇóservice£¬²»ÐèÒªÖªµÀºǫ́ÊǸö¼¯Èº¡£
ÔËÐÐÈçÏÂÃüÁî¾Í»á´´½¨Service:
kubectl create -f ./nginx-rc.yaml
5. Label
±êÇ©£¬ÓÃÀ´×öÂß¼Éϵıê¼Ç¡£ÓÃÀ´¹ØÁªservice¡¢replication controllerºÍpod.
Kubernetes¼Ü¹¹
ÏÂͼΪ¹Ù·½µÄ¼Ü¹¹Í¼¡£
´ÓͼÖп´³ö£¬KubernetesµÄ¼Ü¹¹ÊǵäÐ͵Ämaster/Slave¼Ü¹¹¡£
Master¸ºÔð×ÜÌåµÄе÷¿ØÖÆ£¬Slave¸ºÔð¾ßÌåµÄÈÎÎñ¡£Master/SlaveµÄ×é¼þÈçÏ£º
µÁ¸öͼ£¬ÏÂͼÄܸüÇåÎúµÄչʾKubernates¡£
|