目錄
- 一、 k8s概述
- 1、k8s是什么
- 2、k8s特性
- 3、k8s群集架構與組件
- 4、k8s核心概念
- 二、k8s三種部署方式
- 三、自簽SSL證書
- 四、k8s單節點部署(etcd)
一、 k8s概述
1、k8s是什么
- kubernetes是Google在2014年開源的一個容器群集管理系統,kubernetes簡稱k8s
- k8s用于容器化應用程式的部署,擴展和管理
- k8s提供了容器編排,資源調度,彈性伸縮,部署管理,服務發現等一系列功能
- kubernetes目標是讓部署容器化應用簡單高效
- 官方網站:http://www.kubernetes.io
2、k8s特性
- 自我修復
在節點故障時重新啟動失敗的容器,替換和重新部署,保證預期的副本數量;殺死健康檢查失敗的容器,并且在未準備好之前不會處理客戶端請求,確保線上服務不中斷, - 彈性伸縮
使用命令、UI或者基于CPU使用情況自動快速擴容和縮容應用程式實體,保證應用業務高峰并發時的高可用性;業務低峰時回收資源,以最小成本運行服務, - 自動部署和回滾
K8S采用滾動更新策略更新應用,一次更新 一個Pod,而不是同時洗掉所有Pod,如果更新程序中出現問題,將回滾更改,確保升級不受影響業務, - 服務發現和負載均衡
K8S為多個容器提供一個統一訪問入口(內部IP地址和一個DNS名稱),并且負載均衡關聯的所有容器,使得用戶無需考慮容器IP問題, - 機密和配置管理
管理機密資料和應用程式配置,而不需要把敏感資料暴露在鏡像里,提高敏感資料安全性,并可以將一些常用的配置存盤在K8S中,方便應用程式使用, - 存盤編排
掛載外部存盤系統,無論是來自本地存盤,公有云(如AWS),還是網路存盤(如NFS、GlusterFS、 Ceph)都作為集群資源的一部分使用, 極大提高存盤使用靈活性, - 批處理
提供一次性任務,定時任務;滿足批量資料處理和分析的場景
3、k8s群集架構與組件

- master 組件
- kube-apiserver
Kubernetes API,集群的統一入口, 各組件協調者,以RESTful API提供介面服務,所有物件資源的增刪改查和監聽操作都交給APIServer處理后再提交給Etcd存盤, - kube-controller-manager
處理集群中常規后臺任務,一個資源對應一個控制器,而ControllerManager就是負責管理這些控制器的, - kube-scheduler
根據調度演算法為新創建的Pod選擇一個Node節點,可以任意部署可以部署在同一個節點上,也可以部署在不同的節點上, - etcd
分布式鍵值存盤系統,用于保存群集狀態資料,比如Pod、Service等物件資訊
- kube-apiserver
- Node組件
- kubelet
kubelet是Master在Node節點上的Agent,管理本機運行容器的生命周期,比如創建容器、Pod掛載資料卷、下載secret、獲取容器和節點狀態等作業,kubelet將每個Pod轉換成一組容器 - kube-proxy
在Node節點上實作Pod網路代理,維護網路規則和四層負載均衡作業 - docker或rocket
容器引擎,運行容器
- kubelet
4、k8s核心概念
- Pod
- 最小部署單元
- 一組容器的集合
- 一個Pod中的容器共享網路命名空間
- Pod是短暫的、
- Controllers
- ReplicaSet:確保預期的Pod副本數量
- Deployment:無狀態應用部署
- StatefulSet:有狀態應用部署
- DaemonSet:確保所有Node運行同一個Pod
- Job:一次性任務
- Cronjob:定時任務
- Service
- 防止Pod失聯
- 定義一組Pod的訪問策略
- Lable:標簽,附加到某個資源上,用于關聯物件、查詢和篩選
- Namespaces:命名空間,將物件邏輯上隔離
- Annotations:注釋
二、k8s三種部署方式
- minikube
Minikube是一個工具,可以在本地快速運行一個單點的Kubernetes,僅用于嘗試Kubernetes或日常開發的用戶使用 - kubeadm
Kubeadm也是一個工具,提供kubeadm init 和kubeadm join,用于快速部署Kubernetes群集 - 二進制包
推薦,從官方下載發行版的二進制包,手動部署每個組件,組成Kubernetes群集
生產環境中使用kubeadm和二進制安裝的比較多
三、自簽SSL證書
| 組件 | 使用的證書 |
|---|---|
| etcd | ca.pem,server.pem,server-key.pem |
| flannel | ca.pem,server.pem,server-key.pem |
| kube-apiserver | ca.pem,server.pem,server-key.pem |
| kubelet | ca.pem,ca-key.pem |
| kube-proxy | ca.pem,kube-proxy.pem,kube-proxy-key.pem |
| kubectl | ca.pem,admin.pem,admin-key.pem |
四、k8s單節點部署(etcd)
實驗環境:
Master:192.168.241.20/24 kube-apiserver kube-controller-manager kube-scheduler etcd
Node01:192.168.241.3/24 kubelet kube-proxy docker flannel etcd
Node02:192.168.241.4/24 kubelet kube-proxy docker flannel etcd
#master操作
[root@localhost ~]# mkdir k8s
[root@localhost ~]# cd k8s/
[root@localhost k8s]# ls #從宿主機拖進來
etcd-cert.sh etcd.sh
[root@localhost k8s]# mkdir etcd-cert
[root@localhost k8s]# mv etcd-cert.sh etcd-cert
#下載證書制作工具
[root@localhost k8s]# vim cfssl.sh
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo
[root@localhost k8s]# bash cfssl.sh #下載cfssl官方包
如果有證書制作工具的
[root@localhost k8s]# cd /usr/local/bin/ #宿主機直接拖進此目錄
cfssl cfssl-certinfo cfssljson
[root@localhost k8s]# chmod + /usr/local/bin/*
#開始制作證書
#cfssl 生成證書工具 cfssljson通過傳入json檔案生成證書 cfssl-certinfo查看證書資訊
[root@localhost k8s]# cd etcd-cert/
cat > ca-config.json <<EOF #定義ca證書
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"www": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF
cat > ca-csr.json <<EOF #實作證書簽名
{
"CN": "etcd CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing"
}
]
}
EOF
cfssl gencert -initca ca-csr.json | cfssljson -bare ca - #生產證書,生成ca-key.pem ca.pem
cat > server-csr.json <<EOF #指定etcd三個節點之間的通信驗證
{
"CN": "etcd",
"hosts": [
"192.168.241.20",
"192.168.241.4",
"192.168.241.3"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing"
}
]
}
EOF
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server #生成ETCD證書 server-key.pem server.pem
#原始碼安裝etcd
[root@localhost k8s]# ls
etcd-cert etcd.sh etcd-v3.3.10-linux-amd64.tar.gz
[root@localhost k8s]# tar zxvf etcd-v3.3.10-linux-amd64.tar.gz
etcd-cert etcd.sh etcd-v3.3.10-linux-amd64 etcd-v3.3.10-linux-amd64.tar.gz
[root@localhost k8s]# mkdir /opt/etcd/{cfg,bin,ssl} -p #組態檔,命令檔案,證書
[root@localhost k8s]# cd etcd-v3.3.10-linux-amd64/
[root@localhost etcd-v3.3.10-linux-amd64]# ls
Documentation etcd etcdctl README-etcdctl.md README.md READMEv2-etcdctl.md
[root@localhost etcd-v3.3.10-linux-amd64]# mv etcd etcdctl /opt/etcd/bin/
[root@localhost k8s]# cd etcd-cert/
[root@localhost etcd-cert]# ls
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem etcd-cert.sh server.csr server-csr.json server-key.pem server.pem
[root@localhost etcd-cert]# mv *.pem /opt/etcd/ssl #證書拷貝
[root@localhost k8s]# bash etcd.sh etcd01 192.168.241.20 etcd02=https://192.168.241.4:2380,etcd03=https://192.168.241.3:2380 #進入卡住狀態等待其他節點加入
[root@localhost ~]# ps -ef | grep etcd #使用另外一個會話打開,會發現etcd行程已經開啟
[root@localhost k8s]# scp -r /opt/etcd/ root@192.168.241.4:/opt/ #拷貝證書去其他節點
[root@localhost k8s]# scp -r /opt/etcd/ root@192.168.241.3:/opt #拷貝證書去其他節點
[root@localhost k8s]# scp /usr/lib/systemd/system/etcd.service root@192.168.241.4:/usr/lib/systemd/system/ #啟動腳本拷貝其他節點
[root@localhost k8s]# scp /usr/lib/systemd/system/etcd.service root@192.168.241.3:/usr/lib/systemd/system/ #啟動腳本拷貝其他節點
在node01和node02節點修改
[root@localhost ~]# vim /opt/etcd/cfg/etcd
#[Member]
ETCD_NAME="etcd02"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.241.4:2380" #ip地址修改對應的node節點
ETCD_LISTEN_CLIENT_URLS="https://192.168.241.4:2379" #ip地址修改對應的node節點
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.241.4:2380" #ip地址修改對應的node節點
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.241.4:2379" #ip地址修改對應的node節點
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.241.20:2380,etcd02=https://192.168.241.4:2380,etcd03=https://192.168.241.3:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
[root@localhost ssl]# systemctl start etcd
[root@localhost ssl]# systemctl enable etcd
[root@localhost ssl]# systemctl status etcd
檢查群集狀態(需要在有證書的目錄下使用此命令)
[root@localhost ~]# cd /opt/etcd/ssl
[root@localhost ~]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.241.20:2379,https://192.168.241.4:2379,https://192.168.241.3:2379" cluster-health
這樣簡單的單節點(etcd)就部署完成了,,后續內容會持續更新~~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/275129.html
標籤:其他
上一篇:SpringCloud+SpringCloudAlibaba+SOA架構搭建,使用nacos注冊中心,gateway網關配置
下一篇:kafka--生產者詳解
