Kubernetes簡介
·Kubernetes集羣包含有節點代理kubelet和Master組件(APIs,scheduler,etc),一切都基於分佈式的存儲系統。
Kubernetes設計理念和功能其實就是一個類似Linux的分層架構
更多詳細的介紹可以參考官網
Kubernetes部署
實驗環境:
準備四臺虛擬機保證時間同步
首先安裝chrony軟件
然後打開vim /etc/chrony.conf,寫入內網地址server 172.25.0.250 iburst
systemctl enable --now chronyd
然後做好解析
172.25.0.1server1 reg.westos.org #同時也要保證私有倉庫也要有解析
每臺主機都要部署docker服務我們將已經部署好的
scp docker-ce.repo server4:/etc/yum.repos.d/#拷貝一下yum源
yum install docker-ce#安裝
也要保證私有倉庫的節點均沒問題
然後我們創建一個k8s文件
vim k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
每個節點要設置網關,保證能上網
測試yum repolist
然後我們在server2中安裝軟件
將server2中的k8s.repo拷貝到server3和server4這樣我們就能安裝軟件了
scp k8s.repo server3:/etc/yum.repos.d/
scp k8s.repo server4:/etc/yum.repos.d/
然後在sever3和server4中安裝軟件
yum install -y kubelet kubeadm kubectl
然後保證每個節點的docker開機自啓動
systemctl enable --now docker
修改我們的驅動將cgroup改成systemd,編輯我們的文件daemon.json
然後systemctl daemon_reload systemctl restart docker
將該配置文件fenbie拷貝到server3和server4中
docker和kubeadm都要設置開機自啓動
默認從k8s.gcr.io上下載組件鏡像,需要翻牆纔可以,所以需要修改鏡像倉庫
kubeadm config images list
指定鏡像地址
我們將鏡像上傳到我們的私有倉庫上,
先做認證
然後在harbor上穿件一個項目,把我們的鏡像上傳到裏面去,先找到要上傳的鏡像然後重命名
然後上傳
手動測試拉取我們項目中的鏡像
•# kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers //初始化集羣 --pod-network-cidr=10.244.0.0/16 //使用flannel網絡組件時必須添加
--kubernetes-version //指定k8s安裝版本
然後刪除這些拉取的鏡像我們要讓他們自動拉取,然後做初始化
去其他節點查看
根據提示創建一個用戶
因爲不能tab鍵補齊了根據提示
根據官網提示
POD管理
Pod是可以創建和管理Kubernetes計算的最小可部署單元,一個Pod代表着集羣中運行的一個進程,每個pod都有一個唯一的ip 一個pod類似一個豌豆莢,包含一個或多個容器(通常是docker),多個容器間共享IPC、Network和UTC namespace。
創建pod應用
集羣內部任意節點可以訪問Pod,但集羣外部無法直接訪問
刪除pod節點
默認管理端不參與調度
先利用命令行
我們做一個拉伸
service是一個抽象概念,定義了一個服務的多個pod邏輯合集和訪問pod的策略,一般把service稱爲微服務。
創建service
$ kubectl expose deployment nginx --port=80 --target-port=80
此時pod客戶端可以通過service的名稱訪問後端的兩個Pod
ClusterIP: 默認類型,自動分配一個僅集羣內部可以訪問的虛擬IP
kubectl expose deployment myapp --port=80 --target-port=80
查看更多的細節
查看能否負載均衡後端
我們也可以進行伸縮做成兩個副本
使用NodePort類型暴露端口,讓外部客戶端訪問Pod
kubectl edit svc nginx //修改service的type爲NodePort
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort //也可以在創建service時指定類型
kubectl edit svc myapp
修改service的type爲NodePort
NodePort: 在ClusterIP基礎上爲Service在每臺機器上綁定一個端口,這樣就可以通過 NodeIP:NodePort 來訪問該服務
查看端口號然後訪問
Pod擴容與縮容
kubectl scale --replicas=6 deployment nginx
kubectl scale --replicas=3 deployment nginx
更新pod鏡像
kubectl set image deployment nginx nginx=nginx:1.16.0 --record
回滾:
kubectl rollout history deployment nginx //查看歷史版本
kubectl rollout undo deployment nginx --to-revision=1 //回滾版本
資源清單
$ kubectl api-versions //查詢命令
Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob
•metadata: //元數據
name: //對像名稱
namespace: //對象屬於哪個命名空間
labels: //指定資源標籤,標籤是一種鍵值數據
vim .vimrc
修改我們的資源清單創建一個pod
創建兩個pod
也可以再pod.yaml
添加一個tty:true
我們也可以在我們的pod文件上添加端口和映射
指定資源運行的上限
我們修改pod文件將調度改到server3中