±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ
CC4.0£¬´Ó»·¾³´îÅäµ½¾µÏñÔÙµ½´î½¨¼¯Èº¼°ÆäËûÏà¹Ø£¬´úÂëʾÀýͼʾʾÀýÏêϸ˵Ã÷¡£ |
|
Ò»¡¢»·¾³×¼±¸
Ê×ÏÈ»·¾³»¹ÊÇÈý̨ÐéÄâ»ú£¬ÐéÄâ»úµØÖ·ÈçÏÂ

È»ºóÿ̨»úÆ÷°²×°ºÃ docker£¬ÖÁÓÚ rpm °²×°°ü°æ±¾ÏÂÃæ½éÉÜ
¶þ¡¢ËµµãÕý¾ÊÂ
2.1¡¢°²×°°ü´ÓÄÄÀ´
¹Ù·½µÄÎĵµÒ³Ãæ¸üв¢²»¼°Ê±£¬Í¬Ê±ËûµÄ yum Ô´¸üÐÂÒ²ºÜÂý£¬ÔÙÕß¡ÄÇËûÂè¿ÉÊÇ Google µÄ·þÎñÆ÷£¬ÄÜÌØÃ´Á¬ÉÏÂð£¿ÒÔǰ×ÜÊÇÔÚ¹úÍâ·þÎñÆ÷ʹÓÃ
yumdownloader ÏÂÔØ£¬È»ºó scp µ½±¾µØ£¬ËäÈ»Äܽâ¾öÎÊÌ⣬µ«Êǵ°ËéÒ»µØ¡×îºóÕÒµ½ÁËÔ´Í·£¬ÈçÏÂ
Kubernetes ±àÒëµÄ¸÷ÖÖ·¢Ðа氲װ°üÀ´Ô´ÓÚ Github ÉϵÄÁíÒ»¸ö½Ð release µÄÏîÄ¿£¬µØÖ·
µãÕâÀ°ÑÕâ¸öÏîÄ¿ clone ÏÂÀ´£¬ÓÉÓÚ±¾ÈËÊÇ Centos Óû§£¬ËùÒÔ½øÈë rpm Ŀ¼£¬ÔÚ°²×°ºÃ
docker µÄ»úÆ÷ÉÏÖ´ÐÐÄǸö docker-build.sh ½Å±¾¼´¿É±àÒë rpm °ü£¬×îºó»áÉú³Éµ½µ±Ç°Ä¿Â¼µÄ
output Ŀ¼ÏÂ,½ØÍ¼ÈçÏÂ


2.2¡¢¾µÏñ´ÓÄÄÀ´
¶ÔµÄ£¬Ã»´í£¬gcr.io ¾ÍÊÇ Google µÄÓòÃû£¬·þÎñÆ÷¸ü²»ÓÃÌᣬËùÒÔÔÚ½øÐÐ kubeadm
init ²Ù×÷ʱÈç¹û²»ÏȰÑÕâЩ¾µÏñ load ½øÈ¥¾ø¶Ô»á¿¨ËÀ²»¶¯£¬ÒÔÏÂÁгöÁËËùÐè¾µÏñ£¬µ«Êǰ汾ºÅ¸ù¾Ý
rpm °æ±¾²»Í¬¿ÉÄÜÂÔÓв»Í¬£¬¾ßÌåÔõô¿´ÏÂÃæ½éÉÜ

ÕâЩ¾µÏñÓÐÁ½ÖÖ°ì·¨¿ÉÒÔ»ñÈ¡£¬µÚÒ»ÖÖÊÇÀûÓÃһ̨¹úÍâµÄ·þÎñÆ÷£¬ÔÚÉÏÃæ pull ÏÂÀ´£¬È»ºóÔÙ save
³É tar Îļþ£¬×îºó scp µ½±¾µØ load ½øÈ¥£»Ïà¶ÔÓÚµÚÒ»ÖÖ·½Ê½±È½Ï¿ÓµÄÊÇÈ¡¾öÓÚ·þÎñÆ÷ËÙ¶È£¬Ã¿´Î¸ãÆðÀ´Ò²ºÜµ°ÌÛ£¬µÚ¶þÖÖ·½Ê½¾ÍÊÇÀûÓÃ
docker hub ×öÖÐת£¬¼òµ¥µÄ˵¾ÍÊÇÀûÓà docker hub µÄ×Ô¶¯¹¹½¨¹¦ÄÜ£¬ÔÚ Github
Öд´½¨Ò»¸ö Dockerfile£¬ÀïÃæÖ»ÐèÒª FROM xxxx ÕâЩ gcr.io µÄ¾µÏñ¼´¿É£¬×îºó
pull µ½±¾µØ£¬È»ºóÔÙ tag Ò»ÏÂ
Ê×ÏÈ´´½¨Ò»¸ö github ÏîÄ¿£¬¿ÉÒÔÖ±½Ó fork Îҵļ´¿É

ÆäÖÐÿ¸ö Dockerfile Ö»ÐèÒª FROM һϼ´¿É

×îºóÔÚ Docker Hub ÉÏ´´½¨×Ô¶¯¹¹½¨ÏîÄ¿




×îºóÒªÊÖ¶¯´¥·¢Ò»Ï£¬È»ºó Docker Hub ²Å»á¿ªÊ¼¸øÄã±àÒë

µÈ´ýÍê³É¼´¿ÉÖ±½Ó pull ÁË

2.3¡¢¾µÏñ°æ±¾ÔõôÕû
ÉÏÃæÒѾ½â¾öÁ˾µÏñ»ñÈ¡ÎÊÌ⣬µ«ÊÇÒ»´óÐIJ¡¾ÍÊÇ ¡°ÎÒÌØÃ´Ôõô֪µÀÊÇÄĸö°æ±¾µÄ¡±£¬ÎªÁË·¢Ñï ¡°ÅÙ¸ùÎʵס±
µÄ¾«Éñ£¬ÏȽøÐÐÒ»±é kubeadm init£¬Õâʱºò¾ø¶Ô¿¨ËÀ£¬´Ëʱ½øÈë /etc/kubernetes/manifests
¿ÉÒÔ¿´µ½Ðí¶à json Îļþ£¬ÕâЩÎļþÖж¨ÒåÁËÐèÒªÄÄЩ»ù´¡¾µÏñ


´ÓÉÏͼÖлù±¾¿ÉÒÔ¿´µ½ kubeadm init µÄʱºò»áÀÈ¡ÄÄЩ»ù´¡¾µÏñÁË£¬µ«ÊÇ»¹ÓÐһЩ¾µÏñ£¬ÈÔÈ»ÎÞ·¨ÕÒµ½£¬±ÈÈçkubedns¡¢pause
µÈ£¬ÖÁÓÚÆäËûµÄ¾µÏñ°æ±¾£¬¿ÉÒÔ´ÓÔ´ÂëÖÐÕÒµ½£¬Ô´ÂëλÖÃÊÇ kubernetes/cmd/kubeadm/app/images/images.go
Õâ¸öÎļþÖУ¬ÈçÏÂËùʾ:

Ê£ÓàµÄһЩ¾µÏñ£¬±ÈÈç kube-proxy-amd64¡¢kube-discovery-amd64
Á½¸ö¾µÏñ£¬ÆäÖÐ kube-discovery-amd64 ÏÖÔÚÒ»Ö±ÊÇ 1.0 °æ±¾£¬Ô´ÂëÈçÏÂËùʾ

kube-proxy-amd64 ÔòÊÇÒ»Ö±¸úËæ»ù´¡×é¼þµÄÖ÷°æ±¾£¬Ò²¾ÍÊÇ˵Èç¹û´Ó manifests
Öп´µ½ controller µÈ°æ±¾ÊÇ v.1.4.4£¬ÄÇô kube-proxy-amd64 Ò²ÊÇÕâ¸ö°æ±¾£¬Ô´ÂëÈçÏÂ

×îºó¸ù¾ÝÕâЩ°æ±¾È¥ github ÉÏ×¼±¸ÏàÓ¦µÄ Dockerfile£¬ÔÚÀûÓà Docker Hub
µÄ×Ô¶¯¹¹½¨ build һϣ¬ÔÙ pull ÏÂÀ´ tag ³É¶ÔÓ¦µÄ¾µÏñÃû³Æ¼´¿É
Èý¡¢´î½¨¼¯Èº
3.1¡¢Ö÷»úÃû´¦Àí
¾¹ýÇײ⣬½ÚµãÖ÷»úÃû×îºÃΪ xxx.xxx ÕâÖÖÓòÃû¸ñʽ£¬·ñÔòÔÚijЩÇé¿öÏ£¬POD ÖÐÅܵijÌÐòʹÓÃÓòÃû½âÎöʱ¿ÉÄܳöÏÖÎÊÌ⣬ËùÒÔÏÈÒª´¦ÀíÒ»ÏÂÖ÷»úÃû
# дÈë hostname(node
½Úµãºó׺¸Ä³É .node)
echo "192-168-1-167.master" > /etc/hostname
# ¼ÓÈë hosts
echo "127.0.0.1 192-168-1-167.master"
>> /etc/hosts
# ²»ÖØÆôÇé¿öÏÂʹÄÚºËÉúЧ
sysctl kernel.hostname=192-168-1-167.master
# ÑéÖ¤ÊÇ·ñÐ޸ijɹ¦
? ~ hostname
192-168-1-167.master |
3.2¡¢load ¾µÏñ
ÓÉÓÚ±¾ÈËÒѾÔÚ Docker Hub ÉÏ´¦ÀíºÃÁËÏà¹Ø¾µÏñ£¬ËùÒÔÖ±½Ó pull ÏÂÀ´ tag һϼ´¿É£¬
images=(kube-proxy-amd64:v1.4.4
kube-discovery-amd64:1.0 kubedns-amd64:1.7 kube-scheduler-amd64:v1.4.4
kube-controller-manager-amd64:v1.4.4 kube-apiserver-amd64:v1.4.4
etcd-amd64:2.2.5 kube-dnsmasq-amd64:1.3 exechealthz-amd64:1.1
pause-amd64:3.0 kubernetes-dashboard-amd64:v1.4.1)
for imageName in ${images[@]} ; do
docker pull mritd/$imageName
docker tag mritd/$imageName gcr.io/google_containers/$imageName
docker rmi mritd/$imageName
done |
3.3¡¢°²×° rpm
rpm »ñÈ¡°ì·¨ÉÏÎÄÒѾÌáµ½£¬¿ÉÒÔ×Ô¼º±àÒ룬ÕâÀïÎÒÒѾ±àÒëºÃ²¢Î¬»¤ÁËÒ»¸ö yum Ô´£¬Ö±½Óyum
install ¼´¿É(ÀÁ)
# Ìí¼Ó yum Ô´
tee /etc/yum.repos.d/mritd.repo << EOF
[mritdrepo]
name=Mritd Repository
baseurl=https://rpm.mritd.me/centos/7/x86_64
enabled=1
gpgcheck=1
gpgkey=https://mritd.b0.upaiyun.com/keys/rpm.public.key
EOF
# Ë¢ÐÂcache
yum makecache
# °²×°
yum install -y kubelet kubectl kubernetes-cni
kubeadm |
3.4¡¢³õʼ»¯ master
µÈ»áÓиö¿Ó£¬kubeadm µÈÏà¹Ø rpm °²×°ºó»áÉú³É /etc/kubernetes Ŀ¼£¬¶ø
kubeadm init ʱºòÓÖ»á¼ì²âÕâЩĿ¼ÊÇ·ñ´æÔÚ£¬Èç¹û´æÔÚÔòÍ£Ö¹³õʼ»¯£¬ËùÒÔÒªÏÈÇåÀíһϣ¬ÒÔÏÂÇåÀí½Å±¾À´Ô´ÓÚ
¹Ù·½Îĵµ Tear down ²¿·Ö£¬¸Ã½Å±¾Í¬ÑùÊÊÓÃÓÚ³õʼ»¯Ê§°Ü½øÐÐÖØÖÃ
systemctl stop
kubelet;
# ×¢Òâ: ÏÂÃæÕâÌõÃüÁî»á¸ÉµôËùÓÐÕýÔÚÔËÐÐµÄ docker ÈÝÆ÷£¬
# Èç¹ûÒª½øÐÐÖØÖòÙ×÷£¬×îºÃÏÈÈ·¶¨µ±Ç°ÔËÐеÄËùÓÐÈÝÆ÷¶¼Äܸɵô(¸Éµô²»Ó°ÏìÒµÎñ)£¬
# ·ñÔòµÄ»°×îºÃÊÖ¶¯É¾³ý kubeadm ´´½¨µÄÏà¹ØÈÝÆ÷(gcr.io Ïà¹ØµÄ)
docker rm -f -v $(docker ps -q);
find /var/lib/kubelet | xargs -n 1 findmnt -n
-t tmpfs -o TARGET -T | uniq | xargs -r umount
-v;
rm -r -f /etc/kubernetes /var/lib/kubelet /var/lib/etcd; |
»¹Óиö¿Ó£¬³õʼ»¯ÒÔǰ¼ÇµÃÒ»¶¨ÒªÆô¶¯ kubelet£¬ËäÈ»Äã systemctl status kubelet
¿´×ÅËûÊÇÆô¶¯Ê§°Ü£¬µ«ÊÇÒ²µÃÆô¶¯£¬·ñÔò¾ø±Ú¿¨ËÀ
systemctl enable
kubelet
systemctl start kubelet |
µÈ»áµÈ»á£¬»¹Óпӣ¬Ð°汾ֱ½Ó init »áÌáʾ ebtables not found in system
path ´íÎó£¬ËùÒÔ»¹µÃÏȰ²×°Ò»ÏÂÕâ¸ö°üÔÚ³õʼ»¯
# °²×° ebtables
yum install -y ebtables |
×îºó¼ûÖ¤Ææ¼£µÄʱ¿Ì
# ³õʼ»¯²¢Ö¸¶¨ apiserver
¼àÌýµØÖ·
kubeadm init --api-advertise-addresses 192.168.1.167 |
ÍêÃÀ½ØÍ¼ÈçÏÂ

ÕâÀïÔÙ±¬ÁÏÒ»¸ö¿Ó£¬µ×Ï嵀 kubeadm join --token=b17964.5d8a3c14e99cf6aa
192.168.1.167 ÕâÌõÃüÁîÒ»¶¨±£´æºÃ£¬ÒòΪºóÆÚû·¨ÖØÏֵģ¬ÄãÃÇÀÏ´óÔÙÈÃÄãÌí¼Ó»úÆ÷µÄʱºòÈç¹ûûÕâ¸öÄã»á¿ÞµÄ
3.5¡¢¼ÓÈë node
ÉÏÃæËùÓпӴóԼ˵µÄ²î²»¶àÁË£¬Ö±½ÓÉÏÃüÁîÁË
# ´¦ÀíÖ÷»úÃû
echo "192-168-1-189.node" > /etc/hostname
echo "127.0.0.1 192-168-1-189.node"
>> /etc/hosts
sysctl kernel.hostname=192-168-1-189.node
# ÀÈ¡¾µÏñ
images=(kube-proxy-amd64:v1.4.4 kube-discovery-amd64:1.0
kubedns-amd64:1.7 kube-scheduler-amd64:v1.4.4
kube-controller-manager-amd64:v1.4.4 kube-apiserver-amd64:v1.4.4
etcd-amd64:2.2.5 kube-dnsmasq-amd64:1.3 exechealthz-amd64:1.1
pause-amd64:3.0 kubernetes-dashboard-amd64:v1.4.1)
for imageName in ${images[@]} ; do
docker pull mritd/$imageName
docker tag mritd/$imageName gcr.io/google_containers/$imageName
docker rmi mritd/$imageName
done
# ×° rpm
tee /etc/yum.repos.d/mritd.repo << EOF
[mritdrepo]
name=Mritd Repository
baseurl=https://rpm.mritd.me/centos/7/x86_64
enabled=1
gpgcheck=1
gpgkey=https://mritd.b0.upaiyun.com/keys/rpm.public.key
EOF
yum makecache
yum install -y kubelet kubectl kubernetes-cni
kubeadm ebtables
# ÇåÀíĿ¼(û³õʼ»¯¹ýÖ»ÐèҪɾĿ¼)
rm -r -f /etc/kubernetes /var/lib/kubelet /var/lib/etcd;
# Æô¶¯ kubelet
systemctl enable kubelet
systemctl start kubelet
# ³õʼ»¯¼ÓÈ뼯Ⱥ
kubeadm join --token=b17964.5d8a3c14e99cf6aa 192.168.1.167 |
ͬÑùÍêÃÀ½ØÍ¼


3.6¡¢²¿Êð weave ÍøÂç
ÔÙû²¿Êð weave ʱ£¬dns ÊÇÆô¶¯²»Á˵ģ¬ÈçÏÂ

¹Ù·½¸ø³öµÄÃüÁîÊÇÕâÑùµÄ
kubectl create
-f https://git.io/weave-kube |
±¾×Å ¡°ÅÙ¸ùÎʵ×ÍÚ׿·Ø¡± µÄ¾«Éñ£¬ÏȰÑÕâ¸ö yaml ¸ãÏÂÀ´
wget https://git.io/weave-kube
-O weave-kube.yaml |
È»ºóͬÑùµÄÌ×·£¬´ò¿ª¿´Ò»Ï¾µÏñ£¬ÀûÓà Docker Hub ×öÖÐת£¬¸ãÏÂÀ´ÔÙ load ½øÈ¥£¬È»ºó
create -f ¾ÍÐÐÁË
docker pull mritd/weave-kube:1.7.2
docker tag mritd/weave-kube:1.7.2 weaveworks/weave-kube:1.7.2
docker rmi mritd/weave-kube:1.7.2
kubectl create -f weave-kube.yaml |
ÍêÃÀ½ØÍ¼

3.7¡¢²¿Êð dashboard
dashboard µÄÃüÁîÒ²¸ú weave µÄÒ»Ñù£¬²»¹ýÓиö´ó¿Ó£¬Ä¬È쵀 yaml ÎļþÖжÔÓÚ image
ÀÈ¡²ßÂԵ͍ÒåÊÇ ÎÞÂÛºÎʱ¶¼»áÈ¥ÀÈ¡¾µÏñ£¬µ¼Ö¼´Ê¹Äã load ½øÈ¥Ò²ÎÞÂÑÓã¬ËùÒÔ»¹µÃÏ顄 yaml
¸ãÏÂÀ´È»ºó¸ÄһϾµÏñÀÈ¡²ßÂÔ£¬×îºóÔÙ create -f ¼´¿É
wget https://rawgit.com/kubernetes
/dashboard/master/src/ deploy/kubernetes-dashboard.yaml
-O kubernetes-dashboard.yaml |
±à¼ yaml ¸ÄһϠimagePullPolicy£¬°Ñ Always ¸Ä³É IfNotPresent(±¾µØÃ»ÓÐÔÙÈ¥ÀÈ¡)
»òÕß Never(´Ó²»È¥ÀÈ¡) ¼´¿É

×îºóÔÙÀûÓà Dokcer Hub ÖÐת£¬È»ºó´´½¨(ʵ¼ÊÉÏ dashboard ÒѾÓÐÁË v1.4.1£¬ÎÒÕâÀïÒѾ¸ÄÁË)
kubectl create
-f kubernetes-dashboard.yaml |
½ØÍ¼ÈçÏÂ

ͨ¹ý describe ÃüÁîÎÒÃÇ¿ÉÒԲ鿴Æä±©Â¶³öµÄ NodePoint,È»ºó±ã¿É·ÃÎÊ


ËÄ¡¢ÆäËûµÄһЩ¿Ó
»¹ÓÐһЩÆäËûµÄ¿ÓµÈ×Å´ó¼ÒÈ¥ÃþË÷£¬ÆäÖÐÓÐÒ»¸öÊÇ DNS ½âÎö´íÎ󣬱íÏÖÐÎʽΪ POD ÄڵijÌÐòͨ¹ýÓòÃû·ÃÎʽâÎö²»ÁË£¬cat
Ò»ÏÂÈÝÆ÷µÄ /etc/resolv.conf·¢ÏÖÖ¸ÏòµÄ dns ·þÎñÆ÷Óë kubectl get svc
--namespace=kube-system ÖÐµÄ kube-dsn µØÖ·²»·û£»½â¾ö°ì·¨¾ÍÊÇ ±à¼½ÚµãµÄ
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Îļþ£¬¸ü¸Ä KUBELET_DNS_ARGS µØÖ·Îª get svc ÖÐµÄ kube-dns µØÖ·£¬È»ºóÖØÆô
kubelet ·þÎñ£¬ÖØÐÂɱµô POD Èà kubernetes ÖØ½¨¼´¿É

ÆäËû¿Ó»¶Ó´ó¼Ò²¹³ä |