K8s(Kubernetes)簡介及安裝部署
k8s最初是在Gook8s是Kubernetes的簡稱,因為K和S之間有8個字母,所以才會被稱為k8s。gle公司內部使用了10多年的技術,它的前身是叫做Borg(博格),直到2015年才被Google公司捐贈為開源專案。
如果之前我們有接觸過OpenStack,那麼應該知道管理VM虛擬機器資源可以用OpenStack。那麼管理容器所對應的開源平臺是什麼呢?k8s就是其中之一,在k8s之前也有很多容器管理平臺,有docker自身的docker swarm,也有apache推出的Mesos等等。相比較而言,雖然k8s比其他推出的晚了些,但是絲毫不影響其火爆程度,除了其功能強大外,更何況它還有個好爹。
關於k8s更詳細的介紹,可以移步至k8s中文文件或者k8s官方網站 ,以便檢視更多資料。
接下來開始安裝部署k8s。
博文大綱:
一、環境準備
二、部署前準備
- 1、檢查docker版本、關閉防火牆及Selinux、清空iptables規則、禁用Swap交換分割槽
- 2、配置ssh免密登入、主機名解析及yum源
- 3、開啟iptables橋接功能及路由轉發
三、配置k8s群集- 1、安裝部署k8s相關工具
- 2、初始化k8s叢集
- 3、配置master節點狀態
- 4、配置node01及node02加入master群集
- 5、部署後的最佳化配置
一、環境準備
注:上述三臺centos 7.3伺服器,均執行docker服務,如果是測試環境,那麼記憶體最少2G,CPU至少雙核,並且docker服務的版本不建議過高,最好是18.09及以下。
如需部署docker服務,可參考博文:Docker的安裝詳細配置
二、部署前準備
1、檢查docker版本、關閉防火牆及Selinux、清空iptables規則、禁用Swap交換分割槽
注:以下操作需要在三臺docker主機上分別配置一次,哪怕是在生產環境,都需要進行以下操作,因為k8s有它自己的安全策略。
[root@master ~]# docker -v #確認docker版本Docker version 18.09.0, build 4d60db4#關閉防火牆[root@master ~]# systemctl stop firewalld[root@master ~]# systemctl disable firewalld#關閉Selinux[root@master ~]# setenforce 0 [root@master ~]# vim /etc/sysconfig/selinux SELINUX=disabled #將此處改為disabled[root@master ~]# iptables -F #清空iptables規則#重啟docker服務[root@master ~]# systemctl daemon-reload[root@master ~]# systemctl restart docker#禁用swap交換分割槽[root@master ~]# swapoff -a #臨時禁用swap[root@master ~]# vim /etc/fstab #開啟自動掛載的配置檔案,將swap配置項註釋掉#/dev/mapper/cl-swap swap swap defaults 0 0#就註釋掉上面那行[root@node02 ~]# mount -a #重新載入掛載的配置檔案[root@node02 ~]# free -h #確認輸出的swap行如下(都為0):Swap: 0B 0B 0B
2、配置ssh免密登入、主機名解析及yum源
注:以下沒有特別說明的操作,在master主機上操作即可
[root@master ~]# tail -3 /etc/hosts #在該檔案新增三臺主機的解析192.168.20.6 master192.168.20.7 node01192.168.20.8 node02#配置ssh免密登入(為了方便在主機間複製配置檔案,可不做)[root@master ~]# ssh-keygen -t rsa [root@master ~]# ssh-copy-id node01[root@master ~]# ssh-copy-id node02#將更改後的hosts檔案傳送到node01及node02[root@master ~]# scp /etc/hosts node01:/etc/[root@master ~]# scp /etc/hosts node02:/etc/#接下來配置yum源[root@master ~]# vim /etc/yum.repos.d/kubernetes.repo #編輯yum檔案[kubernetes] name=kubneters baseurl=以上url是阿里開源映象站,可複製網址自行檢視[root@master yum.repos.d]# yum repolist #檢視剛剛配置的yum源中有沒有可用的包kubernetes kubneters 421 #返回的這一行不可為0[root@master yum.repos.d]# yum makecache #製作yum後設資料快取#將yum源的配置檔案複製到另外兩臺節點主機上[root@master ~]# scp /etc/yum.repos.d/kubernetes.repo node01:/etc/yum.repos.d/[root@master ~]# scp /etc/yum.repos.d/kubernetes.repo node02:/etc/yum.repos.d/#在另外兩臺主機上,都需執行以下兩條命令[root@node01 ~]# yum repolistkubernetes kubneters 421 #返回的這一行不可為0[root@node01 ~]# yum makecache
3、開啟iptables橋接功能及路由轉發
同樣,沒有特別說明的配置,在master上進行配置即可。
#開啟iptables橋接功能[root@master ~]# vim /etc/sysctl.d/k8s.conf #寫入以下配置net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1[root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf #重新整理配置net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1# PS:如果報錯“找不到檔案”,需要執行下面的命令以便載入一個模組。[root@master ~]# modprobe br_netfilter #載入br_netfileter模組#將配置的k8s.conf檔案複製到另外兩臺節點[root@master ~]# scp /etc/sysctl.d/k8s.conf node01:/etc/sysctl.d/[root@master ~]# scp /etc/sysctl.d/k8s.conf node02:/etc/sysctl.d/#將配置檔案複製到另外兩臺節點後,需要在node01及02上分別執行下面的命令進行重新整理[root@node02 ~]# sysctl -p /etc/sysctl.d/k8s.conf #重新整理配置檔案#接下來開啟路由轉發(三臺docker主機上都需要進行以下操作)[root@master ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf#開啟路由轉發[root@master ~]# sysctl -p #重新整理配置net.ipv4.ip_forward = 1
配置至此,部署前的工作就完成了。
在進行接下來的操作前,需要先下載我提供的映象。
三、配置k8s群集
1、安裝部署k8s相關工具
注:以下操作在master主機上進行
[root@master ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0 kubectl-1.15.0-0 #安裝k8s的master所需元件[root@master ~]# systemctl enable kubelet #將kubelet加入開機自啟,但現在不要啟動[root@master ~]# mkdir images [root@master ~]# cd images/[root@master images]# rz #上傳我提供的所有映象包,共8個映象包[root@master images]# ls #確認上傳的映象包coredns-1-3-1.tar kube-proxy-1-15.tar etcd-3-3-10.tar kube-scheduler-1-15.tar kube-apiserver-1-15.tar myflannel-11-0.tar kube-controller-1-15.tar pause-3-1.tar#接下來匯入上傳的映象包到docker映象中[root@master ~]# pwd #指令碼不要和映象在同一個目錄/root [root@master ~]# vim a.sh #編寫指令碼如下#!/bin/bashcd /root/images/for i in `ls`do docker load < ${i}done[root@master ~]# sh a.sh #執行指令碼,進行匯入映象
2、初始化k8s叢集
[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 <!-- 這裡指定的版本必須和前面yum安裝的版本一致。指定的兩個網路則是官方建議使用的網段 如果執行上述命令後,返回CPU相關的報錯資訊,那麼需要調大CPU的核心數 初始化成功後,首先複製下面返回的這條命令,並妥善儲存 若初始化失敗,可以執行kubeadm reset進行重置群集 -->kubeadm join 192.168.20.6:6443 --token xfp7g5.6f2bdfjybt8a1j7r \ --discovery-token-ca-cert-hash sha256:17895c549344a83daae4318360dc9c9212b5dc3b1fb7d79ef84a640c63e489e2 <!-- 上面這條命令是用來其他節點加入到當前k8s群集中需要執行的 一旦丟失,特別麻煩,並且只有24小時有效期,每次初始化群集後產生的都不一樣 --> <!-- 接下來呢,依次執行返回的其他指令,如下(由於我是root使用者,所以就省略了sudo指令): -->[root@master ~]# mkdir -p $HOME/.kube [root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
返回的資訊截圖如下,供參考:
3、配置master節點狀態
[root@master images]# kubectl get nodes #檢視群集節點資訊NAME STATUS ROLES AGE VERSION master NotReady master 14m v1.15.0#可以看到master當前狀態為未準備
接下來可以去github官網進行以下操作以便檢視相應的命令:
點選進入後,下拉頁面到以下位置,並複製指定的命令到master節點執行一下:
[root@master images]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml#執行在github官網複製的命令
以上只是方式之一,在網路狀況良好的情況下建議使用上述方法(呼叫遠端檔案執行一下),若網速較差,建議使用以下方法:
[root@master images]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml#將github官網指定的.yml配置檔案下載到本地[root@master images]# ls | grep flannel.yml #確定下載到了當前目錄kube-flannel.yml [root@master images]# kubectl apply -f kube-flannel.yml #指定下載的.yml檔案執行相應命令
上述方法,二選一進行配置即可。
[root@master images]# kubectl get nodes #再次檢視master狀態,發現已經成為了“Ready”NAME STATUS ROLES AGE VERSION master Ready master 30m v1.15.0[root@master images]# ls /etc/kubernetes/ #k8s的配置檔案目錄[root@master images]# ls /etc/kubernetes/manifests/ #k8s的.yaml檔案存放目錄
4、配置node01及node02加入master群集
以下操作需要在node01及node02分別執行一次
[root@node01 ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0#安裝k8s相關元件[root@node01 ~]# systemctl enable kubelet.service #設定為開機自啟[root@node01 ~]# mkdir images[root@node01 ~]# cd images/[root@node01 images]# rz #上傳我提供的映象檔案,共三個,是下面 ls 命令檢視的三個[root@node01 images]# ls #需要上傳的映象檔案如下kube-proxy-1-15.tar myflannel-11-0.tar pause-3-1.tar [root@node01 images]# docker load < kube-proxy-1-15.tar[root@node01 images]# docker load < myflannel-11-0.tar[root@node01 images]# docker load < pause-3-1.tar[root@node01 images]# kubeadm join 192.168.20.6:6443 --token xfp7g5.6f2bdfjybt8a1j7r --discovery-token-ca-cert-hash sha256:17895c549344a83daae4318360dc9c9212b5dc3b1fb7d79ef84a640c63e489e2#執行master初始化群集時返回的命令,以便加入到master的群集中
返回以下資訊,則表示加入成功:
自行將上述配置在node02主機上配置一次即可
當在node01及node02依次配置完成後,即可在master上進行檢視節點狀態,如下:
[root@master images]# kubectl get nodes #在master上檢視節點資訊都為“Ready”NAME STATUS ROLES AGE VERSIONmaster Ready master 51m v1.15.0node01 Ready <none> 4m19s v1.15.0node02 Ready <none> 4m13s v1.15.0
5、部署後的最佳化配置
其實配置至此,K8s已經完成了,但是為了以後更為方便的使用k8s,建議最佳化以下幾項:
- 設定table鍵的預設間距;
- 設定kubectl命令自動補全;
- 最佳化開機自啟配置。
1)設定table預設間距(該最佳化只需在master上進行配置即可,由於經常需要編寫.yml檔案所以才需要更改table間距)
[root@master images]# cd #切換至宿主目錄[root@master ~]# echo "set tabstop=2" >> .vimrc #將此引數寫入.vimrc檔案[root@master ~]# bash #切換shell環境,使更改生效
2)設定kubectl命令自動補全(master和node節點都可配置)
[root@master ~]# yum -y install 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)確認k8s群集沒有問題,並設定為開機自啟
master主機操作如下:
[root@master ~]# kubectl get pod -n kube-system #檢視pod資源,類似於docker中的容器,確保返回的資訊都是running#“-n kube-system”:是k8s的名稱空間
上述命令返回的資訊如下:
master和node節點上都需要進行以下操作,以便設定為開機自啟:
[root@master ~]# systemctl enable kubelet[root@master ~]# systemctl enable docker
設定為開機自啟後,k8s群集的配置基本完成了,現在可以重啟一下這三臺伺服器,如果重啟後,執行下面的命令,狀態都還是running,則表示絕對沒有問題了。
[root@master ~]# kubectl get pod -n kube-system #重啟後驗證狀態是否還都是running
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957453/viewspace-2764631/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Chaosblade簡介及安裝部署
- K8s kubernetes安裝部署K8S
- PostgreSQL簡介及安裝SQL
- RabbitMQ簡介及安裝MQ
- Django簡介及安裝Django
- Allure簡介及安裝
- Docker簡介及安裝Docker
- Flume安裝及簡單部署
- Locust 簡介及安裝使用
- consul的簡介及安裝
- PostgreSQL簡介及安裝步驟SQL
- 1、Linux簡介及安裝Linux
- etcd簡介及叢集安裝部署使用
- Docker 理論簡介及安裝教程Docker
- Spring的簡介安裝及配置Spring
- Kubernetes(K8S) kubesphere 安裝K8S
- RocketMQ安裝及部署MQ
- redis 簡介及windows 下的redis 安裝RedisWindows
- 01 . MongoDB簡介及部署配置MongoDB
- Kubernetes1.3 - K8S安裝K8S
- Kubernetes 入門與安裝部署
- Kubernetes專欄 | 安裝部署(一)
- 簡要分析ZooKeeper基本原理及安裝部署
- Redis系列(一):Redis簡介及環境安裝Redis
- Docker-ElasticSearch7.8.1 安裝及簡單介紹DockerElasticsearch
- KVM簡介,安裝及常見使用詳解
- Java基礎:Java簡介及安裝配置(1)Java
- 【K8S 系列】k8s 學習二,kubernetes 核心概念及初步瞭解安裝部署方式K8S
- [K8S 系列]k8s 學習二,kubernetes 核心概念及初步瞭解安裝部署方式K8S
- Multisim14--軟體簡介及安裝教程(內含安裝包)
- ubuntu安裝docker及k8sUbuntuDockerK8S
- Ansible的安裝及部署
- Apache安裝部署及工作模式Apache模式
- 附004.Kubernetes Dashboard簡介及使用
- 安裝apache及介紹Apache
- Rancher簡介與安裝
- jQuery簡介和安裝jQuery
- Redash視覺化BI系統部署安裝及簡單使用視覺化