國(guó)內(nèi)(墻內(nèi))部署最新版本kubernetes(k8s) v1.16.3 最簡(jiǎn)單方式蹄葱,無需手動(dòng)拉取鏡像氏义,打tag

最近Kubernetes v1.16.3 剛剛發(fā)布,由于公司要上線業(yè)務(wù)图云,所以就先在線下自己搭環(huán)境測(cè)試惯悠。由于之前的數(shù)據(jù)中心在國(guó)外,所以安裝Kubernetes去gcr.io琼稻,k8s.gcr.io拉取鏡像的時(shí)候沒有問題吮螺。 但是現(xiàn)在的公司VM在阿里云上,眾所周知帕翻,由于一些不可抗力國(guó)內(nèi)無法直接拉取google上的任何鏡像,這就包括gcr.io萝风。

之前用了一些做法嘀掸,就是先找一臺(tái)可以科學(xué)上網(wǎng)的機(jī)器,把鏡像先拉下來规惰,然后重新打tag睬塌。或者利用shell腳本自動(dòng)pull歇万,tag揩晴,然后push到private registry,然后安裝的時(shí)候指定自己的私庫贪磺。

但是由于版本更迭硫兰,有時(shí)候tag就變了,需要改腳本重新測(cè)試寒锚,所以感覺一直不完美劫映。

后來發(fā)現(xiàn)國(guó)內(nèi)可以直接用azure.cn的鏡像加速,直接拉取k8s需要的所有鏡像刹前。之前用過阿里云的鏡像加速站點(diǎn)泳赋,也是可以的。Azure.cn基本和google同步喇喉,速度可能更快一些祖今,個(gè)人喜歡用azure.cn的鏡像。下面就是Azure鏡像的常用站點(diǎn):

docker hub 鏡像:

docker pull dockerhub.azk8s.cn/xxx/yyy:tag

gcr.io 鏡像:

docker pull gcr.azk8s.cn/xxx/yyy:tag

k8s.gcr.io 鏡像:

對(duì)于kubernetes相關(guān)的鏡像,我們會(huì)使用到k8s.gcr.io開頭的鏡像千诬。

k8s.gcr.io等價(jià)于gcr.io/google-containers撒踪,因此同上也可以使用中科大鏡像或者Azure中國(guó)鏡像。

docker pull gcr.azk8s.cn/google-containers/xxx:yyy

quay.io鏡像:

docker pull quay.azk8s.cn/xxx/yyy:zzz

下面開始Kubernetes v1.16.3的正式安裝:

系統(tǒng)要求:

? ? One or more machines running one of:


? ? ? ? Ubuntu 16.04+

? ? ? ? Debian 9+

? ? ? ? CentOS 7

? ? ? ? Red Hat Enterprise Linux (RHEL) 7

? ? ? ? Fedora 25+

? ? ? ? HypriotOS v1.0.1+

? ? ? ? Container Linux (tested with 1800.6.0)


? ? 2 GB or more of RAM per machine (any less will leave little room for your apps)

? ? 2 CPUs or more

? ? Full network connectivity between all machines in the cluster (public or private network is fine)

? ? Unique hostname, MAC address, and product_uuid for every node. See here for more details.

? ? Certain ports are open on your machines. See here for more details.

? ? Swap disabled. You MUST disable swap in order for the kubelet to work properly.

安裝環(huán)境:

VMwareWorkstation or VirtualBOX:

1臺(tái)master:4 core 8GB

2臺(tái)worker:4 core 8GB

自動(dòng)化工具:

ansible

Kubernetes安裝工具:

kubeadm

利用kubeadm安裝集群

首先大渤,準(zhǔn)備好3臺(tái)VM

master IP:192.168.199.200

worker1:192.168.199.201

worker2:192.168.199.202

然后做一些初始化工作:

CentOS/RHEL:

? ? 關(guān)閉swap分區(qū)

? ? 關(guān)閉selinux

? ? 關(guān)閉NetworkManager

? ? 關(guān)閉firewalld

? ? 添加從master到worker節(jié)點(diǎn)的免密鑰登錄

? ? 由于沒有DNS服務(wù)器制妄,需要配置主機(jī)上的/etc/hosts,把master和worker節(jié)點(diǎn)對(duì)應(yīng)添加進(jìn)去

下面正式開始:

1 登錄到master節(jié)點(diǎn)泵三,安裝ansible

? ? #CentOS/RHEL:

? ? yum install epel-release

? ? yum install -y ansible python2-pip.noarch

? ? pip install --upgrade ansible

2 編寫ansible inventory文件

vim ~/inventory

? ? [all]

? ? k8s-master node_ip=192.168.199.200

? ? node1 node_ip=192.168.199.201

? ? node2 node_ip=192.168.199.202


3 編寫playbook (下面的playbook是以Centos7為例耕捞,如果是Ubuntu需要把包管理器從yum改為apt,rpm_key改為apt_key)

vim ~/host-prepare.yml

? ? ---

? ? - hosts: all

? ? ? become: true

? ? ? tasks:

? ? ? - name: Disable NetworkManager

? ? ? ? service:

? ? ? ? ? name: NetworkManager

? ? ? ? ? state: stopped

? ? ? ? ? enabled: false


? ? ? - name: Disable firewalld

? ? ? ? service:

? ? ? ? ? name: firewalld

? ? ? ? ? state: stopped

? ? ? ? ? enabled: false


? ? ? - name: Install docker and its dependecies

? ? ? ? yum:

? ? ? ? ? name: docker

? ? ? ? ? state: latest

? ? ? ? ? update_cache: yes


? ? ? - name: Start docker

? ? ? ? service:

? ? ? ? ? name: docker

? ? ? ? ? state: started

? ? ? ? ? enabled: yes


? ? ? - name: Remove swapfile from /etc/fstab

? ? ? ? mount:

? ? ? ? ? name: "{{ item }}"

? ? ? ? ? fstype: swap

? ? ? ? ? state: absent

? ? ? ? with_items:

? ? ? ? ? - swap

? ? ? ? ? - none


? ? ? - name: Disable swap

? ? ? ? command: swapoff -a

? ? ? ? when: ansible_swaptotal_mb > 0


? ? ? - name: Disable Selinux

? ? ? ? selinux:

? ? ? ? ? state: disabled


? ? ? - name: Add kubernetes repository for stable version

? ? ? ? yum_repository:

? ? ? ? ? description: kubernetes

? ? ? ? ? name: kubernetes

? ? ? ? ? baseurl: https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

? ? ? ? ? enabled: yes

? ? ? ? ? gpgcheck: yes

? ? ? ? ? repo_gpgcheck: yes

? ? ? ? ? gpgkey: https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

? ? ? ? ? state: present


? ? ? - name: Add an yum signing key for Kubernetes

? ? ? ? rpm_key:

? ? ? ? ? key: https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

? ? ? ? ? state: present


? ? ? - name: Add an rpm signing key for Kubernetes

? ? ? ? rpm_key:

? ? ? ? ? key: https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

? ? ? ? ? state: present


? ? ? - name: Install Kubernetes binaries

? ? ? ? package:

? ? ? ? ? name: "{{ packages }}"

? ? ? ? ? state: present

? ? ? ? ? use: yum

? ? ? ? vars:

? ? ? ? ? packages:

? ? ? ? ? ? - kubelet

? ? ? ? ? ? - kubeadm

? ? ? ? ? ? - kubectl


? ? ? - name: Configure node ip

? ? ? ? lineinfile:

? ? ? ? ? path: /etc/sysconfig/kubelet

? ? ? ? ? line: KUBELET_EXTRA_ARGS=--node-ip={{ node_ip }}


? ? ? - name: Restart kubelet

? ? ? ? service:

? ? ? ? ? name: kubelet

? ? ? ? ? daemon_reload: yes

? ? ? ? ? state: restarted

? ? ? ? ? enabled: true

4 運(yùn)行playbook

首先在master上生成ssh密鑰:

ssh-keygen

ssh-copy-id root@k8s-master

ssh-copy-id root@node1

ssh-copy-id root@node2

sed -i s/#host_key_checking/host_key_checking/ /etc/ansible/ansible.cfg

ansible-playbook -i ~/inventory ~/host-prepare.yml

5 在master節(jié)點(diǎn)運(yùn)行kubeadm安裝kubernetes:

這里標(biāo)紅的參數(shù),就是我指定image倉庫的地址烫幕,默認(rèn)為gcr.io俺抽,這里我改為Azure.cn的地址

kubeadm init --node-name k8s-master --apiserver-advertise-address <your master node IP> --pod-network-cidr 192.168.0.0/16 --image-repository gcr.azk8s.cn/google-containers

根據(jù)機(jī)器配置和網(wǎng)速,等待時(shí)間不等较曼,大概5分鐘磷斧,可以看到master節(jié)點(diǎn)就成功安裝了〗萦蹋看到如下提示弛饭,就可以根據(jù)最后一條命令加入worker node了。

? ? Your Kubernetes control-plane has initialized successfully!


? ? To start using your cluster, you need to run the following as a regular user:


? ? ? mkdir -p $HOME/.kube

? ? ? sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

? ? ? sudo chown $(id -u):$(id -g) $HOME/.kube/config


? ? You should now deploy a pod network to the cluster.

? ? Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:

? ? ? /docs/concepts/cluster-administration/addons/


? ? You can now join any number of machines by running the following on each node

? ? as root:


? ? kubeadm join 192.168.199.200:6443 --token 95u7da.08yb7leugjunvg3s? ? --discovery-token-ca-cert-hash sha256:cc40687e79b5ea1486d3f1ea066789578758822a46d1d54516cc8d9ff28cf774

加入worker node之前萍歉,我們按照提示運(yùn)行:

? mkdir -p $HOME/.kube

? sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

? sudo chown $(id -u):$(id -g) $HOME/.kube/config

我們還需要安裝網(wǎng)絡(luò)組件侣颂,這里我選擇的是Calico,所以在master上運(yùn)行以下命令即可安裝Calico:

kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml

然后利用kubectl查看集群健康狀態(tài)(如果沒運(yùn)行上一步枪孩,安裝CNI的過程憔晒,這里master的STATUS將會(huì)是NotReady):

[root@k8s-master ~]# kubectl get node

NAME? ? ? ? STATUS? ? ROLES? ? AGE? ? VERSION

k8s-master? Ready? master? 3m50s? v1.16.3

這里我們看到集群master部署完成了,而且可以正常連接蔑舞。如果master狀態(tài)還是NotReady拒担,說明沒有部署Calico,重新部署Calico之后,狀態(tài)會(huì)變成Ready

[root@k8s-master ~]# kubectl get pod -A

NAMESPACE? ? NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE

kube-system? calico-kube-controllers-55754f75c-zgxgv? 1/1? ? Running? 0? ? ? ? ? 38s

kube-system? calico-node-vsk9v? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 38s

kube-system? coredns-58ffd68966-4lf5s? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 4m56s

kube-system? coredns-58ffd68966-5xpvf? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 4m56s

kube-system? etcd-k8s-master? ? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 4m5s

kube-system? kube-apiserver-k8s-master? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 4m12s

kube-system? kube-controller-manager-k8s-master? ? ? ? 1/1? ? Running? 0? ? ? ? ? 3m55s

kube-system? kube-proxy-hmkv2? ? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 4m56s

kube-system? kube-scheduler-k8s-master? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 3m46s

我們可以看到master節(jié)點(diǎn)已經(jīng)正常了攻询,各組件也正常啟動(dòng)从撼,沒問題。

6 最后一步蜕窿,加入worker node

我們?cè)趦膳_(tái)worker節(jié)點(diǎn)上按照提示運(yùn)行:

kubeadm join 192.168.199.200:6443 --token 95u7da.08yb7leugjunvg3s? ? --discovery-token-ca-cert-hash sha256:cc40687e79b5ea1486d3f1ea066789578758822a46d1d54516cc8d9ff28cf774

這里注意谋逻,上面命令的token和hash是你自己機(jī)器生成的,一定要用你自己的token

最終桐经,我們可以查看集群已經(jīng)裝好了:

[root@k8s-master ~]# kubectl get node

NAME? ? ? ? STATUS? ROLES? ? AGE? ? VERSION

k8s-master? Ready? ? master? 24m? ? v1.16.3

node1? ? ? ? Ready? ? <none>? 2m51s? v1.16.3

node2? ? ? ? Ready? ? <none>? 84s? ? v1.16.3

[root@k8s-master ~]# kubectl get pod -A

NAMESPACE? ? NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE

kube-system? calico-kube-controllers-55754f75c-zgxgv? 1/1? ? Running? 0? ? ? ? ? 19m

kube-system? calico-node-rn95j? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 2m47s

kube-system? calico-node-rsgdb? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 80s

kube-system? calico-node-vsk9v? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 19m

kube-system? coredns-58ffd68966-4lf5s? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 23m

kube-system? coredns-58ffd68966-5xpvf? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 23m

kube-system? etcd-k8s-master? ? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 22m

kube-system? kube-apiserver-k8s-master? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 22m

kube-system? kube-controller-manager-k8s-master? ? ? ? 1/1? ? Running? 0? ? ? ? ? 22m

kube-system? kube-proxy-44c7r? ? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 80s

kube-system? kube-proxy-bsjn2? ? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 2m47s

kube-system? kube-proxy-hmkv2? ? ? ? ? ? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 23m

kube-system? kube-scheduler-k8s-master? ? ? ? ? ? ? ? 1/1? ? Running? 0? ? ? ? ? 22m

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毁兆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子阴挣,更是在濱河造成了極大的恐慌气堕,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異茎芭,居然都是意外死亡揖膜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門梅桩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壹粟,“玉大人,你說我怎么就攤上這事宿百〕孟桑” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵垦页,是天一觀的道長(zhǎng)雀费。 經(jīng)常有香客問我,道長(zhǎng)痊焊,這世上最難降的妖魔是什么盏袄? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮薄啥,結(jié)果婚禮上辕羽,老公的妹妹穿的比我還像新娘。我一直安慰自己罪佳,他們只是感情好逛漫,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赘艳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪克握。 梳的紋絲不亂的頭發(fā)上蕾管,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音菩暗,去河邊找鬼掰曾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛停团,可吹牛的內(nèi)容都是我干的旷坦。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼佑稠,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼秒梅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起舌胶,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤捆蜀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辆它,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡誊薄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锰茉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呢蔫。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖飒筑,靈堂內(nèi)的尸體忽然破棺而出片吊,到底是詐尸還是另有隱情,我是刑警寧澤扬霜,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布定鸟,位于F島的核電站,受9級(jí)特大地震影響著瓶,放射性物質(zhì)發(fā)生泄漏联予。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一材原、第九天 我趴在偏房一處隱蔽的房頂上張望沸久。 院中可真熱鬧,春花似錦余蟹、人聲如沸卷胯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窑睁。三九已至,卻和暖如春葵孤,著一層夾襖步出監(jiān)牢的瞬間担钮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工尤仍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留箫津,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓宰啦,卻偏偏與公主長(zhǎng)得像苏遥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赡模,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容