安裝k8s服務以及配置好環境

1.安裝前提

1.1安裝企業7以上環境

請參照我之前的博客,與安裝7.3的步驟完全相同。

1.2安裝docker應用環境

在這裏插入圖片描述
在這裏插入圖片描述

1.3 配置k8s的yum庫源

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

1.4 docker加速

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

1.5 導出各版本鏡像列表

kubelet是Node的agent,當Scheduler確定在某個Node上運行Pod後,會將Pod的具體配置信息(image、volume等)發送給該節點的kubelet,kubelet根據這些信息創建和運行容器,並向Master報告運行狀態。

# kubelet:運行在cluster所有節點上,負責啓動pod和容器
# kubeadm:用於初始化cluster
# kubectl:是kubernetes命令行工具,通過kubectk可以部署和管理應用,查看各種資源,創建,刪除和更新各種組件配置阿里雲網絡yum源頭(三臺虛擬機都做)

在這裏插入圖片描述

k8s.gcr.io/kube-apiserver:v1.16.2
# API Server提供HTTP/HTTPS RESTful API,即Kubernetes API。API Server是Kubernetes Cluster的前端接口,各種客戶端工具(CLI或UI)以及Kubernetes其他組件可以通過它管理Cluster的各種資源

k8s.gcr.io/kube-controller-manager:v1.16.2
# Controller Manager負責管理Cluster各種資源,保證資源處於預期的狀態

k8s.gcr.io/kube-scheduler:v1.16.2
# Scheduler負責決定將Pod放在哪個Node上運行。Scheduler在調度時會充分考慮Cluster的拓撲結構,當前各個節點的負載,以及應用對高可用、性能、數據親和性的需求

k8s.gcr.io/kube-proxy:v1.16.2
k8s.gcr.io/pause:3.1
# service在邏輯上代表了後端的多個Pod,外界通過service訪問Pod。service接收到的請求是如何轉發到Pod的呢?這就是kube-proxy要完成的工作

k8s.gcr.io/etcd:3.3.15-0
k8s.gcr.io/coredns:1.6.2
# etcd負責保存Kubernetes Cluster的配置信息和各種資源的狀態信息。當數據發生變化時,etcd會快速地通知Kubernetes相關組件

1.6 編寫下載鏡像的腳本

下載鏡像的腳本
在這裏插入圖片描述
在這裏插入圖片描述
下載完成後刪除不必要的標籤
在這裏插入圖片描述

1.6確定域名解析

在這裏插入圖片描述

1.7 配置免祕和關閉swap分區

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

1.8 kubeadm創建cluster

在這裏插入圖片描述

# --apiserver-advertise-address:指明用master的哪個intserface與cluster的其他節點通信(如果master有多個intserface,建議明確指定,如果不指定,kubeadm會自動選擇有默認網關的interface)
# --pod-network-cidr= 指定pos網絡的範圍(lubernetes支持多種網絡方案,而且不同的網絡方案對--pod-network-cidr 有自己的要求,這裏設定爲 10.244.0.0/16 是因爲我們將使用flannel網絡方案,必須設置成這個CIDR)

1.9 配置kubectl

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
根據執行結果向下做

在這裏插入圖片描述
最後結果提示如何配置kubectl,提示如何安裝pod網絡,提示如何註冊其他節點到cluster。

kubeadm # 執行初始化前的檢查
# 生成token和證書
# 生成kubeconfig文件,kubelet需要用這個文件與master通信
# 安裝附加組建kube-proxy 和kube-dns
# kubernetes master初始化成功
# 根據提示執行命令 推薦linux的普通用戶執行(因爲root執行會有一些問題)![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20191119201306761.png)

在這裏插入圖片描述
在你用戶家目錄下,你應該建立一個kube目錄,在目錄中寫下config文件是複製admin.conf文件,
給這個文件本用戶的可執行的權限
在這裏插入圖片描述

1.9 安裝pod網絡

要讓kubernetes cluster能夠工作,必須安裝pod網絡,否則pod之間無法通信
在這裏插入圖片描述

1.10 添加node節點

在這裏插入圖片描述
在這裏插入圖片描述

# 後面的認證信息在master初始化的時候可以獲得

1.11等待下載成功

# Pending、ContainerCreating、ImagePullBackOff都表明Pod沒有就緒,Running纔是就緒狀態。我們可以通過kubectl describe pod <Pod Name>查看Pod的具體情況
# 可以看到在下載image時失敗,如果網絡質量不好,這種情況是很常見的。我們可以耐心等待,因爲Kubernetes會重試 我們也可以自己手動執行docker pull去下載這個鏡像

在這裏插入圖片描述
這時三個節點都沒有準備好,直到我們的到了一下所有變爲Ready時,就已將準備成功。
在這裏插入圖片描述
我們查看這個pod所需要的所有鏡像下載肯定已經成功。
在這裏插入圖片描述
那麼我們的問題就出現了,到底怎樣區分node和pod呢

Node的職責是運行容器應用。Node由Master管理,Node負責監控並彙報容器的狀態,同時根據Master的要求管理容器的生命週期。Node運行在Linux操作系統上,可以是物理機或者是虛擬機
Pod是Kubernetes的最小工作單元。每個Pod包含一個或多個容器。Pod中的容器會作爲一個整體被Master調度到一個Node上運行Kubernetes引入Pod主要基於下面兩個目的:
1)可管理性。
有些容器天生就是需要緊密聯繫,一起工作。Pod提供了比容器更高層次的抽象,將它們封裝到一個部署單元中。Kubernetes以Pod爲最小單位進行調度、擴展、共享資源、管理生命週期
2)通信和資源共享。
Pod中的所有容器使用同一個網絡namespace,即相同的IP地址和Port空間。它們可以直接用localhost通信。同樣的,這些容器可以共儲,Kubernetes掛載volume到Pod,本質上是將volume掛載到Pod中的每一個容器Pods有兩種使用方式:
(1)運行單一容器
one-container-per-Pod是Kubernetes最常見的模型,這種情況下,只是將單個容器簡單封裝成Pod。即便是隻有一個容器,Kubernetes管理的也是Pod而不是直接管理容器。
(2)運行多個容器。
問題在於:哪些容器應該放到一個Pod中?
答案是:這些容器聯繫必須非常緊密,而且需要直接共享資源舉個例子這個Pod包含兩個容器:一個是File Puller,一個是Web Server
File Puller會定期從外部的Content Manager中拉取最新的文件,將其存放在共享的volume中。Web Server從volume讀取文件,響應Consumer的請求這兩個容器是緊密協作的,它們一起爲Consumer提供最新的數據;同時它們也通過volume共享數據,所以放到一個Pod是合適的再來看一個反例:是否需要將Tomcat和MySQL放到一個Pod中?
Tomcat從MySQL讀取數據,它們之間需要協作,但還不至於需要放到一個Pod中一起部署、一起啓動、一起停止。同時它們之間是通過JDBC交換數據,並不是直接共享存儲,所以放到各自的Pod中更合適

2.搭建一個簡單的應用

爲了幫助大家更好地理解Kubernetes架構,我們部署一個應用來演示各個組件之間是如何協作的
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章