您好,登錄后才能下訂單哦!
今天小編就為大家?guī)硪黄?span >介紹k8s基礎(chǔ)知識的文章。小編覺得挺實用的,為此分享給大家做個參考。一起跟隨小編過來看看吧。
自動化運維
平臺化(ansible、git、gitlab、docker、jenkins、elk)
自動化(工具/腳本)
容器化(docker/k8s)
虛擬化
docker和虛擬機的區(qū)別
更高效的資源利用。虛擬機是一個完備的系統(tǒng),容器只是一個進程。
虛擬機啟動慢,容器是秒級
一致的運行環(huán)境
CI/CD
容器核心概念
鏡像Image
(1)鏡像是一個特殊的文件系統(tǒng)。它除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準(zhǔn)備的一些配置參數(shù)(例如環(huán)境變量)。鏡像不包含任何動態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會被改變。
(2)鏡像采用的是AUFS,實現(xiàn)分層結(jié)構(gòu)。鏡像構(gòu)建時,會一層層構(gòu)建,前一層是后一層的基礎(chǔ)。每一層構(gòu)建完就不會再發(fā)生改變,后一層上的任何改變只發(fā)生在自己這一層。鏡像是只讀的。創(chuàng)建新鏡像時,底層內(nèi)容不變,只是給鏡像增加了一個新層次。
容器Container
(1)容器可以認(rèn)為是鏡像的一次執(zhí)行,是可讀寫的鏡像。容器只是操作系統(tǒng)上的一個進程,進程執(zhí)行完畢將會退出。不要假定容器會一直存在,應(yīng)該假設(shè)它隨時會崩潰。容器一旦出現(xiàn)故障,不要猶豫,直接將它刪除,再啟動一個。
(2)按照 Docker 最佳實踐的要求,容器不應(yīng)該向其存儲層內(nèi)寫入任何數(shù)據(jù),容器存儲層要保持無狀態(tài)化。所有的文件寫入操作,都應(yīng)該使用 數(shù)據(jù)卷(Volume)、或者綁定宿主目錄,在這些位置的讀寫會跳過容器存儲層,直接對宿主(或網(wǎng)絡(luò)存儲)發(fā)生讀寫,其性能和穩(wěn)定性更高。數(shù)據(jù)卷的生存周期獨立于容器,容器消亡,數(shù)據(jù)卷不會消亡。
倉庫Repository
倉庫是鏡像倉庫,負責(zé)對Docker鏡像進行管理的(類似倉庫管理員),每個倉庫可以包含多個標(biāo)簽(Tag),每個標(biāo)簽對應(yīng)一個鏡像。也可以自己創(chuàng)建私有倉庫。
k8s組成
這個集群主要包括兩個部分:
一個Master節(jié)點(主節(jié)點):用于對容器進行控制、調(diào)度,一般是物理服務(wù)器,
一群Node節(jié)點(計算節(jié)點):工作負載節(jié)點,里面是具體的容器,可以是物理服務(wù)器,也可以是云主機
補充:
Pod是Kubernetes最基本的操作單元。一個Pod代表著集群中運行的一個進程,它內(nèi)部封裝了一個或多個緊密相關(guān)的容器。除了Pod之外,K8S還有一個Service的概念,一個Service可以看作一組提供相同服務(wù)的Pod的對外訪問接口。
k8s架構(gòu)圖
k8s工作流程圖簡述
k8s配置及簡單應(yīng)用
1、作為master安裝k8s(node11:192.168.4.11),同時作為node節(jié)點安裝docker
2、修改docker配置文件,使之可以使用物理機上的私有鏡像倉庫
[root@node11 k8s_pkgs]# vim /etc/sysconfig/docker
OPTIONS='--selinux-enabled=false ... //關(guān)閉selinux
[root@node11 k8s_pkgs]# vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.4.254:5000"]
}
#################################################################################
[root@room9pc01 images]# docker images //物理機(192.168.4.254)搭建私有鏡像倉庫如下
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.8.254:5000/mysql latest 7bb2586065cd 10 weeks ago 476.9 MB
192.168.8.254:5000/pod-infrastructure latest 99965fb98423 19 months ago 208.6 MB
192.168.8.254:5000/guestbook-php-frontend latest 47ee16830e89 2 years ago 510 MB
192.168.8.254:5000/tomcat-app latest a29e200a18e9 2 years ago 358.2 MB
192.168.8.254:5000/redis-master latest 405a0b586f7e 3 years ago 419.1 MB
192.168.8.254:5000/guestbook-redis-slave latest e0c36a1fa372 3 years ago 109.5 MB
1
3、啟動相關(guān)服務(wù)
k8s—master:
etcd:是一個數(shù)據(jù)庫,保存了整個集群的狀態(tài)
kube-apiserver:執(zhí)行指令,提供了資源操作的唯一入口,并提供認(rèn)證、授權(quán)、訪問控制、API注冊和發(fā)現(xiàn)等機制
kube-controller-manager:MT5實際操作www.gendan5.com/mt5.html 控制管理器,負責(zé)維護集群的狀態(tài),比如故障檢測、自動擴展、滾動更新等
kube-scheduler:負責(zé)資源的調(diào)度,按照預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的機器上
k8s—node:
kubelet:接受指令的node節(jié)點(k8s客戶端),負責(zé)維護容器的生命周期,同時也負責(zé)Volume(CVI)和網(wǎng)絡(luò)(CNI)的管理
kube-proxy:代理節(jié)點,負責(zé)為Service提供cluster內(nèi)部的服務(wù)發(fā)現(xiàn)和負載均衡
docker:真正的容器服務(wù),負責(zé)鏡像管理以及Pod和容器的真正運行
[root@node11 k8s_pkgs]# rpm -q docker
docker-1.13.1-91.git07f3374.el7.centos.x86_64
#master的組件
[root@node11 kubernetes]# systemctl start etcd
[root@node11 kubernetes]# systemctl enable etcd
[root@node11 k8s_pkgs]# systemctl start kube-apiserver.service
[root@node11 k8s_pkgs]# systemctl enable kube-apiserver.service
[root@node11 k8s_pkgs]# systemctl start kube-controller-manager.service
[root@node11 k8s_pkgs]# systemctl enable kube-controller-manager.service
[root@node11 k8s_pkgs]# systemctl start kube-scheduler.service
[root@node11 k8s_pkgs]# systemctl enable kube-scheduler.service
#node的組件
[root@node11 k8s_pkgs]# systemctl start docker
[root@node11 k8s_pkgs]# systemctl enable docker
[root@node11 k8s_pkgs]# systemctl start kubelet.service
[root@node11 k8s_pkgs]# systemctl enable kubelet.service
[root@node11 k8s_pkgs]# systemctl start kube-proxy.service
[root@node11 k8s_pkgs]# systemctl enable kube-proxy.service
4、修改配置,重啟服務(wù)
[root@node11 k8s_pkgs]# ls /etc/kubernetes/
apiserver config controller-manager kubelet proxy scheduler
[root@node11 k8s_pkgs]# vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" //允許任何主機均可以訪問本機
把ServiceAccount從KUBE_ADMISSION_CONTROL中刪除 //刪除服務(wù)帳號
[root@node11 k8s_pkgs]# systemctl restart kube-apiserver.service
[root@node11 k8s_pkgs]# vim /etc/kubernetes/config
KUBE_MASTER="--master=http://192.168.4.11:8080" //指定master的ip地址
[root@node11 k8s_pkgs]# vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0" //定義客戶端運行在所有地址上,便于master遠程管理
KUBELET_API_SERVER="--api-servers=http://192.168.4.11:8080" //客戶端指定服務(wù)器地址和ip
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=192.168.4.254:5000/pod-infrastructure" //指定pod(容器組)的私有鏡像倉庫
[root@node11 k8s_pkgs]# systemctl restart kubelet
5、應(yīng)用測試tomcat+mysql
[root@node11 tomcat_mysql]# vim mysql-rc.yaml /創(chuàng)建mysql的rc聲明文件
apiVersion: v1
kind: ReplicationController //類型聲明
metadata:
name: mysql //rc名稱
spec: //文件聲明
replicas: 1 //要求標(biāo)簽是app:mysql的pod數(shù)目是1
selector: //選擇器,查找標(biāo)簽是app:mysql的pod
app: mysql
template: //如果pod數(shù)目不達標(biāo),創(chuàng)建滿足以下條件的pod
metadata:
labels:
app: mysql
spec:
containers:
#根據(jù)yaml文件創(chuàng)建相關(guān)資源
[root@node11 tomcat_mysql]# kubectl create -f mysql-rc.yaml //啟動一個名稱為mysql的rc容器
[root@node11 tomcat_mysql]# kubectl get rc //獲取容器信息
NAME DESIRED CURRENT READY AGE
mysql 1 1 1 1h
[root@node11 tomcat_mysql]# kubectl get pod //該pod容器組包含一個基礎(chǔ)架構(gòu)容器和mysql容器
NAME READY STATUS RESTARTS AGE
mysql-v0pdr 1/1 Running 0 1h
#查看到pod后,查看其詳細消息
[root@node11 tomcat_mysql]# kubectl describe pod mysql-v0pdr //查看pod信息
[root@node11 tomcat_mysql]# docker ps
#創(chuàng)建mysql服務(wù)
[root@node11 tomcat_mysql]# vim mysql-svc.yaml //啟動mysql容器服務(wù)腳本
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
#創(chuàng)建web服務(wù)
[root@node11 tomcat_mysql]# vim myweb-rc.yaml //啟動comcat容器腳本
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 5 //副本個數(shù)
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
瀏覽器訪問http://192.168.4.11:30001/
刪除一個容器后,k8s會發(fā)現(xiàn)容器數(shù)目已經(jīng)少于rc聲明,它會自動創(chuàng)建新的對應(yīng)容器
[root@node11 tomcat_mysql]# docker rm -f c1bf3822f088
[root@node11 tomcat_mysql]# docker ps
1
2
如果想要動態(tài)調(diào)整pod數(shù)目,只是將rc改個數(shù)即可
[root@node11 tomcat_mysql]# kubectl scale --replicas=3 replicationcontroller myweb //將myweb容器個數(shù)調(diào)整為3個
[root@node11 tomcat_mysql]# kubectl get rc
NAME DESIRED CURRENT READY AGE
mysql 1 1 1 1h
myweb 3 3 3 36m
[root@node11 tomcat_mysql]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-hg9z0 1/1 Running 0 58m
myweb-3g6rz 1/1 Running 0 32m
myweb-90jts 1/1 Running 0 32m
myweb-rvrr1 1/1 Running 0 32m
[root@node11 tomcat_mysql]# docker ps -a |awk '{print $2}' //docker個數(shù)也自動調(diào)整
ID
192.168.4.254:5000/tomcat-app
192.168.4.254:5000/tomcat-app
192.168.4.254:5000/tomcat-app
192.168.4.254:5000/pod-infrastructure
192.168.4.254:5000/pod-infrastructure
192.168.4.254:5000/pod-infrastructure
192.168.4.254:5000/mysql
192.168.4.254:5000/pod-infrastructure
刪除服務(wù)(pod也稱微服務(wù))、rc
[root@node11 tomcat_mysql]# kubectl delete service mysql
service "mysql" deleted
[root@node11 tomcat_mysql]# kubectl delete service myweb
service "myweb" deleted
[root@node11 tomcat_mysql]# kubectl delete rc mysql
replicationcontroller "mysql" deleted
[root@node11 tomcat_mysql]# kubectl delete rc myweb
replicationcontroller "myweb" deleted
[root@node11 tomcat_mysql]# docker ps //無容器運行
php-redis主從
#redis-master
[root@node11 php_redis]# ls
frontend-controller.yaml redis-master-controller.yaml redis-slave-controller.yaml
frontend-service.yaml redis-master-service.yaml redis-slave-service.yaml
[root@node11 php_redis]# vim redis-master-controller.yaml
piVersion: v1
kind: ReplicationController
metadata:
name: redis-master
labels:
name: redis-master
spec:
replicas: 1
selector:
name: redis-master
template:
metadata:
labels:
name: redis-master
spec:
containers:
#redis-slave
[root@node11 php_redis]# vim redis-slave-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
replicas: 2
selector:
name: redis-slave
template:
metadata:
labels:
name: redis-slave
spec:
containers:
#frontend(前端)
[root@node11 php_redis]# vim frontend-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: frontend
labels:
name: frontend
spec:
replicas: 3
selector:
name: frontend
template:
metadata:
labels:
name: frontend
spec:
containers:
[root@node11 php_redis]# kubectl create -f frontend-controller.yaml
[root@node11 php_redis]# vim frontend-service.yaml
apiVersion: v1
kind: Service
metadata:
name: frontend
labels:
name: frontend
spec:
type: NodePort
ports:
瀏覽器訪問http://192.168.4.11:30001/,測試redis主從讀寫分離
以上就是k8s基礎(chǔ)知識的詳細內(nèi)容了,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。