前言:
kubernetes 官方提供的三種部署方式
minikube
Minikube是一個工具,可以在本地快速運行一個單點的Kubernetes,僅用於嘗試Kubernetes或日常開發的用戶使用。部署地址:https://kubernetes.io/docs/setup/minikube/
kubeadm
Kubeadm也是一個工具,提供kubeadm init和kubeadm join,用於快速部署Kubernetes集群。部署地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
二進制包
推薦,從官方下載發行版的二進制包,手動部署每個組件,組成Kubernetes集群。下載地址:https://github.com/kubernetes/kubernetes/releases
以上就是kubernetes的三種安裝方式的介紹,本篇博客介紹的是二進制包的安裝,下一篇博客將介紹容器化的安裝,博客為轉載,原博主的內容是非常的接地氣,也沒有什么錯誤,就在原文上稍作了修飾。
借鑒博客:https://www.cnblogs.com/xkops/p/6169034.html
此博客里面有每個k8s配置文件的注釋:https://blog.csdn.net/qq_35904833/article/details/78190257
啊西吧,啊西吧,根據上面的博客終於安裝成功了。媽的,網上大部分博客安裝k8s配置寫得亂七八槽的,終於找到一篇條理清晰,安裝詳細的k8s安裝博客啦,哈哈哈哈,不容易啊快三個星期了,從狗屁不懂搞這玩意。
下面寫一寫我自己的安裝流程:
一、安裝准備:
准備兩台服務器(我用的是CentOS7系統):192.168.26.227,192.168.26.228
一主一從:
master機:192.168.26.227
node機:192.168.26.228
簡單說一下k8s:
k8s是個什么玩意?
可以這樣去理解:k8s全稱:Kubernetes,它可以看作是一個分布式系統支撐平台。
我們為什么要用k8s集群?
故障自愈:
k8s這個玩意可以監控容器運行,我們把項目放到容器里。由於一些外部內部原因服務器承受不住壓力,如果主節點上的容器突然掛了,k8s立刻會自己將主機上的服務調度到另一個node機器上運行
應用更新:
更新項目上線時不用中斷當前項目的運行。
還有一些自動擴容,縮容的概念就不講了,我本人也沒親身體會用過,不好說。
k8s的全生命周期管理:
在k8s進行管理應用的時候,基本步驟是:創建集群,部署應用,發布應用,擴展應用,更新應用。
k8s的主要組件,以及它們主要是用來干什么的:
etcd:一款開源軟件。提供可靠的分布式數據存儲服務,用於持久化存儲K8s集群的配置和狀態
apiservice:用戶程序(如kubectl)、K8s其它組件之間通信的接口。K8s其它組件之間不直接通信,而是通過API server通信的。這一點在上圖的連接中可以體現,例如,只有API server連接了etcd,即其它組件更新K8s集群的狀態時,只能通過API server讀寫etcd中的數據。
Scheduler:排程組件,為用戶應用的每一可部署組件分配工作結點。
controller-manager:執行集群級別的功能,如復制組件、追蹤工作結點狀態、處理結點失敗等。Controller Manager組件是由多個控制器組成的,其中很多控制器是按K8s的資源類型划分的,如Replication Manager(管理ReplicationController 資源),ReplicaSet Controller,PersistentVolume controller。
kube-proxy:在應用組件間負載均衡網絡流量。
kubelet:管理工作結點上的容器。
Contriner runtime Docker, rkt等實際運行容器的組件
上面都是些k8s集群所要用到的組件,具體這些組件都是用來干嘛的呢,我們來好好分析分析。
master主機上192.168.26.277必須要有的組件:
etcd :提供分布式數據存儲的數據庫吧,用於持久化存儲k8s集群的配置和狀態
kube-apiserver:api service提供了http rest接口,是整個集群的入口,K8s其它組件之間不直接通信,而是通過API server通信的。(只有API server連接了etcd,即其它組件更新K8s集群的狀態時,只能通過API server讀寫etcd中的數據)
kube-scheduler:scheduler負責資源的調度
kube-controller-manager:整個集群的管理控制中心,此組件里面是由多個控制器組成的,如:Replication Manager(管理ReplicationController 資源),ReplicaSet Controller,PersistentVolume controller。主要作用用來復制組件、追蹤工作結點狀態、處理失敗結點
node節點機上192.168.26.228必須要有的組件:
flannel:好像是用來支持網絡通信的吧
kube-proxy:用來負載均衡網絡流量
kubelet:用來管理node節點機上的容器
docker:運行項目鏡像容器的組件
2018年11月30日:
今天又看了一些博客,多了一些認識和理解,如下:
k8s的整個集群運行原理:【重點核心知識很重要】
master主機上的kube-controller-manager是整個集群的控制管理中心,kube-controler-manager中的node controller模塊 通過apiservice提供的監聽接口,實時監控node機的狀態信息。
當某個node機器宕機,controller-manager就會及時排除故障並自動修復。
node節點機上的kubelet進程每隔一段時間周期就會調用一次apiservice接口報告自身狀態,apiservice接口接受到這些信息后將節點狀態更新到ectd中。kubelet也通過apiservice的監聽接口監聽pod信息,如果監控到新的pod副本被調度綁定到本節點,則執行pod對應的容器的創建和啟動,如果監聽到pod對象被刪除,則刪除本節點對應的pod容器。(目前對pod、容器、鏡像這些概念還不是很清晰,無法在大腦中構建這都是些什么玩意,先做個筆記記着吧)
剛才在別人博客上看到一個圖很有意思,我們總監叫我學了ELK日志系統,jenkins自動構建工具,最近在搞k8s,還差消息中間件沒學,然后就看到了這個圖,頓時整個公司要搭建的分布式服務器環境一目了然,由於我不是架構師並不知道公司整個服務器分布式系統是怎樣的,現在才恍然大悟,原來如此,原來如此,原來如此呀。
原圖:
原圖的博客地址:https://blog.csdn.net/zyc88888/article/details/79281954

我做了筆記的圖:

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
下面廢話不多說,來進行安裝步驟:
二、k8s安裝步驟:
1、所有機器上執行以下命令,准備安裝環境:(注意是所有機器,主機master,從機node都要安裝)
1.1、安裝epel-release源和docker
yum -y install epel-release docker
1.2、所有機器關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#查看防火牆狀態
firewall-cmd --state
2、現在開始master主機上192.168.26.227安裝kubernetes Master
2.1、使用yum安裝etcd、kubernetes-master
yum -y install etcd kubernetes-master
2.2、編輯:vi /etc/etcd/etcd.conf文件,修改結果如下:

2.3、配置:vi /etc/kubernetes/apiserver文件,配置結果如下:

2.4、啟動etcd、kube-apiserver、kube-controller-manager、kube-scheduler等服務,並設置開機啟動。
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES;systemctl enable $SERVICES;systemctl status $SERVICES ; done
2.5、在etcd中定義flannel網絡
etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'
》》》》》》》》以上master主機上的配置安裝什么的都弄完了》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
3、接下來弄node從機上的配置安裝什么的
3.1、在node機上192.168.26.228安裝kubernetes Node和flannel組件應用
yum -y install flannel kubernetes-node
3.2、為flannel網絡指定etcd服務,修改/etc/sysconfig/flanneld文件,配置結果如下圖:

3.3、修改:vi /etc/kubernetes/config文件,配置結果如下圖:

3.4、修改node機的kubelet配置文件/etc/kubernetes/kubelet

3.5、node節點機上啟動kube-proxy,kubelet,docker,flanneld等服務,並設置開機啟動。
for SERVICES in kube-proxy kubelet docker flanneld;do systemctl restart $SERVICES;systemctl enable $SERVICES;systemctl status $SERVICES; done
》》》》》》以上所有master主機,node節點機上的配置就完成了,接下來看看k8s集群是否搭建起來了》》》》》》》》》》》》》》》》》》》
在master主機上192.168.26.227執行如下命令,查看運行的node節點機器:
kubectl get nodes
成功啦啦啦啦,結果圖如下:

異常問題處理(一):
如果在執行yaml文件的時候,pod的狀態一直是containercreating,可能是因為本地的網絡無法從國外的網站上拉取鏡像:

在node節點機執行以下命令,下載憑證文件: 1、wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm 2、rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem 3、docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
異常問題處理(二):
啟動pod,並且端口映射之后,按理來說應該可以在外部訪問node節點的映射端口可以訪問到服務,如果報錯無法訪問后,可能是因為如下原因:
flannel比較依賴防火牆,部署docker-ce版本的話,在查看iptables -L的情況的時候,就會發現docker轉發的規則是Drop的,這時候需要你手動改為Accept狀態才可以轉發的。


兩種方式可以對這個情況做對應修改:
1.使用命令把FORWARD DROP 修改成FORWARD ACCEPT
iptables -P FORWARD ACCEPT #機器重啟之后,又恢復DROP了,再此加一條防止重啟還原DROP的命令 sleep 60 && /sbin/iptables -P FORWARD ACCEPT #再查看 sudo iptables -S
2.更改docker的啟動服務腳本即可
vim /etc/systemd/system/docker.service 在 [Service] 這項下面添加 ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT 然后重啟docker
如果找不到/etc/systemd/system/docker.service,那么試試/lib/systemd/system/docker.service這個目錄,(docker版本的不同導致的這個問題)

