Kubernetes是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單而且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。
Kubernetes是Google 2014年建立管理的,是Google 10多年大規模容器管理技術Borg的開源版本。node
經過kubernetes能夠實現的功能:linux
咱們的目標是促進完善組件和工具的生態系統,以減輕應用程序在公有云或私有云中運行的負擔。git
kubernetes的特色:github
爲何要使用容器?容器優點總結:docker
kubernetes能作什麼?
能夠在物理或虛擬機的Kubernetes集羣上運行容器化應用,Kubernetes能提供一個以「容器爲中心的基礎架構」,知足在生產環境中運行應用的一些常見需求,如:數據庫
kubernetes中文官網:
https://kubernetes.io/zh/
kubernetes中文社區:
https://www.kubernetes.org.cn/doc-11vim
3臺dockerhost主機(centos7)
master: 172.16.1.30
node01:172.16.1.31
node02:172.16.1.32
注意事項:每臺主機內存最少2GB,最低雙核cpu,每臺主機必須安裝docker環境,關閉防火牆(通常kubernetes是運行在公司內部的),禁用selinux,確保時間同步。centos
咱們如今安裝kubernetes時,利用的是kubernetes官方開發出來的自動化部署的軟件(kubeadm),以來實現更快速的安裝kubernetes。api
清空iptables規則,並從新加載docker(所有節點都需操做):緩存
[root@master ~]# iptables -F [root@master ~]# systemctl daemon-reload [root@master ~]# systemctl restart docker
(1)修改主機名:
[root@sqm-docker01 ~]# hostnamectl set-hostname master [root@sqm-docker01 ~]# bash [root@sqm-docker02 ~]# hostnamectl set-hostname node01 [root@sqm-docker02 ~]# bash [root@sqm-docker03 ~]# hostnamectl set-hostname node02 [root@sqm-docker03 ~]# bash
(2)ssh,域名解析,免密登陸:
配置域名解析: [root@master ~]# vim /etc/hosts
##將hosts文件拷貝給其餘節點:
[root@master ~]# scp /etc/hosts root@172.16.1.31:/etc/hosts [root@master ~]# scp /etc/hosts root@172.16.1.32:/etc/hosts
免密登陸: [root@master ~]# ssh-keygen -t rsa #生成密鑰
將密鑰拷貝給其餘節點:
[root@master ~]# ssh-copy-id node01
[root@master ~]# ssh-copy-id node02
(3)禁用swap(kubernetes特性)
注意:全部節點都需禁用,否則沒法加入集羣。[root@master ~]# swapoff -a #臨時生效
永久禁用swap:(修改開機加載配置文件) [root@master ~]# vim /etc/fstab
能夠從新加載使其生效: [root@master ~]# mount -a
登陸阿里巴巴開源鏡像站,下載yum源:
編寫自定義repo文件:(三個節點都須要部署)
[root@master yum.repos.d]# pwd /etc/yum.repos.d [root@master yum.repos.d]# vim kubernetes.repo
查看可用的repo源: [root@master yum.repos.d]# yum repolist
##在本地生成緩存:[root@master yum.repos.d]# yum makecache
##將repo文件拷貝給node01和node02:
[root@master yum.repos.d]# scp kubernetes.repo node01:/etc/yum.repos.d/ [root@master yum.repos.d]# scp kubernetes.repo node02:/etc/yum.repos.d/
接下來在兩個節點上執行相同操做。
(2)打開iptables橋接功能(三個節點都需部署)
[root@master ~]# vim /etc/sysctl.d/k8s.conf #在該目錄下自定義conf文件 //添加如下配置項: net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1
//從新加載文件使其生效: [root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1
注意:若是報「找不到文件」,咱們須要加載一個模塊:
[root@master ~]# modprobe br_netfilter
將配置文件拷貝給node01和node02進行部署。
(3)打開路由轉發(三個節點都需部署)
[root@master ~]# echo net.ipv4.ip_forward = 1 > /etc/sysctl.conf [root@master ~]# sysctl -p #加載該文件,使其生效 net.ipv4.ip_forward = 1
一樣的將配置文件拷貝給node01和node02進行部署。
(4)在master節點上進行操做:
#修改yum的配置文件,緩存下面要下載的rpm包: [root@master ~]# vim /etc/yum.conf
進行下載:[root@master ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0 kubectl-1.15.0-0
下載完成後查看是否緩存了rpm包: [root@master ~]# cd /var/cache/yum/x86_64/7/kubernetes/packages
##將服務加入開機自啓:[root@master ~]# systemctl enable kubelet.service
初始化集羣(下載鏡像):
但是因爲國內網絡環境限制,咱們不能直接從谷歌的鏡像站下載鏡像,這時,須要咱們手工從docker鏡像站下載鏡像,而後從新命名,這裏用腳原本實現。
腳本部份內容以下:
#能夠參考這樣的格式進行下載:
[root@master ~]# cat k8s.sh
#!/bin/bash
docker pull mirrorgooglecontainers/kube-apiserver:v1.14.1
docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.1
docker pull mirrorgooglecontainers/kube-scheduler:v1.14.1
docker pull mirrorgooglecontainers/kube-proxy:v1.14.1
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1
這裏我是已經下載好了,只須要導入形影的鏡像便可:
[root@master ~]# mkdir images
[root@master ~]# cd images/
導入鏡像命令:docker load --input
##初始化集羣:[root@master images]# kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
參數解釋:
--kubernetes-version:指定當前kubernetes版本號(查看版本:kubelet --version)
--pod-network: 指定pod網段,kubernetes默認指定網絡。
--ignore:忽略全部報錯
注意:若是初始化成功後的信息信息被覆蓋了想要從新初始化,能夠先執行kubeadm reset命令重置一下,再從新初始化。
而當你執行完重置命令後,初始化時,可能會報如下錯誤:
報錯指的是數據庫的一個error,因此咱們須要將該目錄該刪除掉,就能夠從新初始化了:
[root@master ~]# rm -rf /var/lib/etcd
##根據上面的提示建立目錄並授予權限:
[root@master ~]# mkdir -p $HOME/.kube [root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
##查看節點:
能夠看出master的狀態是未就緒(NotReady),之因此是這種狀態是由於還缺乏一個附件flannel,沒有網絡各Pod是沒法通訊的。
#部署docker容器的跨主機網絡:
//將該yml文件下載到本地: [root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
//執行該yml文件: [root@master ~]# kubectl apply -f kube-flannel.yml
//查看配置好的yml文件:
(5)以上是主節點的安裝部署,而後個node幾點的安裝
####node01和node02分別進行下載(無需安裝kubectl):
[root@node01 ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0
[root@node02 ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0
###下載完成後將該服務加入開機自啓: [root@node01 ~]# systemctl enable kubelet.service [root@node02 ~]# systemctl enable kubelet.service
node01:(導入本地鏡像)
[root@node01 ~]# mkdir images [root@node01 ~]# cd images/
##將這些鏡像拷貝給node02,進行安裝:
[root@node01 images]# scp * node02:/root/images
##導入後查看node02鏡像:
(6)將node01和node02節點加入集羣:
執行如下命令加入集羣(在初始化集羣是生成的,而且每次的值都是不一樣的)
kubeadm join 172.16.1.30:6443 --token 6udpmi.u4msx9vgkqfr1i1l --discovery-token-ca-cert-hash sha256:4fdbbb94d5d7087a6c27d441df2f89d21e9ca035f0386ed963a195656794619a
node02節點執行一樣的操做。
##當node01和node02加入集羣后,在master上查看節點的信息:
確保有其餘節點的信息,而且狀態都爲ready。
注意:若是狀態爲NotReady,那就是網絡的問題,沒有部署跨主機網絡,則須要執行上面部署docker容器的跨主機的網絡。
至此kubernetes集羣已經搭建完畢---------------------
(1)更改tab距離: [root@master ~]# vim .vimrc set tabstop=2 [root@master ~]# source .vimrc
(2)//kubect命令自動補全: [root@master ~]# yum install -y bash-completion [root@master ~]# source /usr/share/bash-completion/bash_completion [root@master ~]# source <(kubectl completion bash) [root@master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
(3)//查看運行中的pod資源(資源對象中的一種),-n:namespace kube-system(kubernetes自帶的命名空間) [root@master ~]# kubectl get pods -n kube-system
部署kubernetes集羣內容到此完畢。。。
———————— 本文至此結束,感謝閱讀 ————————