這篇文章主要介紹“k8s的安裝與簡(jiǎn)單使用”,在日常操作中,相信很多人在k8s的安裝與簡(jiǎn)單使用問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”k8s的安裝與簡(jiǎn)單使用”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
作為一家“創(chuàng)意+整合+營(yíng)銷”的成都網(wǎng)站建設(shè)機(jī)構(gòu),我們?cè)跇I(yè)內(nèi)良好的客戶口碑。創(chuàng)新互聯(lián)公司提供從前期的網(wǎng)站品牌分析策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、成都做網(wǎng)站、創(chuàng)意表現(xiàn)、網(wǎng)頁(yè)制作、系統(tǒng)開(kāi)發(fā)以及后續(xù)網(wǎng)站營(yíng)銷運(yùn)營(yíng)等一系列服務(wù),幫助企業(yè)打造創(chuàng)新的互聯(lián)網(wǎng)品牌經(jīng)營(yíng)模式與有效的網(wǎng)絡(luò)營(yíng)銷方法,創(chuàng)造更大的價(jià)值。
支持集群環(huán)境內(nèi)容編排的工具kubernetes 簡(jiǎn)稱k8s.
k8s是谷歌官方提供的,底層基于docker,與docker-swarm是競(jìng)爭(zhēng)關(guān)系。
集群容器管理領(lǐng)域幾乎都是采用的k8s。
k8s的職責(zé)
自動(dòng)化容器的部署和復(fù)制
隨時(shí)擴(kuò)展或收縮容器規(guī)模
容器分組Group,并且提供容器間的負(fù)載均衡
實(shí)時(shí)監(jiān)控,即時(shí)故障發(fā)現(xiàn),自動(dòng)替換
k8s Master 主節(jié)點(diǎn)
Node 節(jié)點(diǎn)
Service 服務(wù)
Replication Controller 復(fù)制控制器
Label 標(biāo)簽
Container 容器
Pod k8s最小控制單元
Master
Master是集群的網(wǎng)關(guān)和中樞樞紐,主要作用:暴露API接口,跟蹤其他服務(wù)器的健康狀態(tài)、以最優(yōu)方式調(diào)度負(fù)載,以及編排其他組件之間的通信。單個(gè)的Master節(jié)點(diǎn)可以完成所有的功能,但是考慮單點(diǎn)故障的痛點(diǎn),生產(chǎn)環(huán)境中通常要部署多個(gè)Master節(jié)點(diǎn),組成Cluster.
Node
Node是k8s的工作節(jié)點(diǎn),負(fù)責(zé)接收來(lái)自Master的工作指令,并根據(jù)指令相應(yīng)地創(chuàng)建和銷毀Pod對(duì)象,以及調(diào)整網(wǎng)絡(luò)規(guī)則進(jìn)行合理路由和流量轉(zhuǎn)發(fā)。生產(chǎn)環(huán)境中,Node節(jié)點(diǎn)可以有N個(gè)。
Pod
pod是容器的容器,可以包含多個(gè)Container
是k8s最小的可部署的單元,一個(gè)Pod就是一個(gè)進(jìn)程
pod內(nèi)部容器的網(wǎng)絡(luò)互通,每個(gè)pod都有獨(dú)立的虛擬ip
pod都是部署完整的應(yīng)用或者模塊
kubelet kube-proxy docker
國(guó)內(nèi)安裝k8s途徑
使用kubeadmin離線安裝
使用阿里公有云平臺(tái)k8s
通過(guò)yum官方倉(cāng)庫(kù)
二進(jìn)制包形式安裝,kubeasz
# 以下命令在三臺(tái)虛擬機(jī)執(zhí)行 yz10 yz20 yz21 mkdir /usr/local/k8s-install cd /usr/local/k8s-install
10.211.55.10 yz10 Master節(jié)點(diǎn) 10.211.55.20 yz20 Node節(jié)點(diǎn) 10.211.55.21 yz21 Node節(jié)點(diǎn)
# 1. 調(diào)整時(shí)區(qū) timedatectl set-timezone Asia/Shanghai # 2. 關(guān)閉selinux和防火墻 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0 systemctl disable firewalld systemctl stop firewalld # 3. k8sadmin鏡像下載附帶對(duì)應(yīng)的docker # 4. 鏡像上傳到每個(gè)節(jié)點(diǎn) mkdir -p /usr/local/k8s-install scp -r kubernetes-1.14 root@yz10:/usr/local/k8s-install # 5. 安裝docker,記得配置加速器 tar -xf docker-ce-18.09.tar.gz cd docker yum localinstall -y *.rpm # 6. 確認(rèn)cgroup為 cgroupfs docker info|grep cgroup # 7. 安裝kubeadm tar -xf kube114-rpm.tar.gz cd kube114-rpm yum localinstall -y *.rpm # 8. 關(guān)閉交換區(qū) swapoff -a #關(guān)閉 vi /etc/fstab # 注釋這行 永久關(guān)閉 #/dev/mapper/centos-swap swap swap defaults 0 0 # 9. 配置網(wǎng)橋 cat </etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system # 10. 通過(guò)鏡像安裝k8s docker load -i k8s-114-images.tar.gz docker load -i flannel-dashboard.tar.gz
確保上述節(jié)點(diǎn)都已經(jīng)安裝好了k8s。
# master主服務(wù)器網(wǎng)絡(luò)設(shè)置 kubeadm init --kubernetes-version v1.14.1 --pod-network-cidr 10.244.0.0/16 # 運(yùn)行完畢后查看需要手動(dòng)運(yùn)行的命令 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 查看節(jié)點(diǎn), 可以看到只有一個(gè)master節(jié)點(diǎn) kubectl get nodes NAME STATUS ROLES AGE VERSION yz10 NotReady master 5m21s v1.14.1 # 查看存在問(wèn)題的pod kubectl get pod --all-namespaces
# pending 是需要安裝flannel網(wǎng)絡(luò)組件 kubectl create -f /usr/local/k8s-install/kubernetes-1.14/kube-flannel.yml # 再次查看,已經(jīng)處于running狀態(tài) kubectl get pod --all-namespaces # 查看master的token kubeadm token list # 其余節(jié)點(diǎn)加入master節(jié)點(diǎn)集群 kubeadm join 10.211.55.10:6443 --token 63zvtd.rej4gqrhselysqsb --discovery-token-unsafe-skip-ca-verification
master節(jié)點(diǎn)運(yùn)行: kubectl get nodes
可以看到,集群已經(jīng)部署完畢。
kubeadm 是k8s集群快速構(gòu)建工具
kubelet 運(yùn)行在所有節(jié)點(diǎn)上,負(fù)責(zé)啟動(dòng)pod和容器,以系統(tǒng)服務(wù)的形式出現(xiàn)
kubectl 是k8s命令行工具,提供指令
systemctl start kubelet
設(shè)置開(kāi)機(jī)啟動(dòng) systemctl enable kubelet
# master開(kāi)啟儀表盤 kubectl apply -f kubernetes-dashboard.yaml kubectl apply -f admin-role.yaml kubectl apply -f kubernetes-dashboard-admin.rbac.yaml kubectl -n kube-system get svc # 查看pod情況,dashbord running正常 kubectl get pods --all-namespaces # 遇到問(wèn)題可以刪除pod,重新配置 kubectl -n kube-system delete pod/{podName}
訪問(wèn) http://宿主機(jī)ip:32000/ 即可進(jìn)入dashbord
工作負(fù)載 -》 創(chuàng)建 即可
部署是指k8s向node節(jié)點(diǎn)發(fā)送指令創(chuàng)建容器的過(guò)程
k8s支持yml格式的部署腳本
kubectl create -f 部署文件.yml
編寫(xiě)第一個(gè)k8s部署腳本文件:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tomcat-deploy spec: replicas: 2 template: metadata: labels: app: tomcat-cluster spec: containers: - name: tomcat-cluster image: tomcat ports: - containerPort: 8080
與部署相關(guān)的常用命令:
kubectl create -f 部署文件.yml -》 創(chuàng)建部署
kubectl apply -f 部署文件.yml -》 更新部署配置
kubectl get pod [-o wide] -》 查看已部署pod
kubectl describe pod pod名稱 -》 查看pod詳細(xì)信息
kubectl logs [-f] pod名稱 -》 查看pod輸出日志
# 創(chuàng)建tomcat容器 kubectl create -f tomcat-deploy.yml # 查看部署 kubectl get deployment
service 服務(wù)用于對(duì)外暴露應(yīng)用。
編寫(xiě)服務(wù) tomcat-service.yml
apiVersion: v1 kind: Service metadata: name: tomcat-service labels: app: tomcat-service spec: type: NodePort selector: app: tomcat-cluster ports: - port: 18010 targetPort: 8080 nodePort: 32500
# 創(chuàng)建負(fù)載均衡服務(wù) kubectl create -f tomcat-service.yml # 查看服務(wù) kubectl get service
nfs主要是采用遠(yuǎn)程過(guò)程調(diào)用RPC機(jī)制實(shí)現(xiàn)文件傳輸
yum install -y nfs-utils rpcbind
# 編輯nfs共享文件設(shè)置 vi /etc/exports /usr/local/data/www-data 10.211.55.10/24(rw,sync)
systemctl start nfs.service systemctl start rpcbind.service systemctl enable nfs.service systemctl enable rpcbind.service # exportfs查看 exportfs /usr/local/data/www-data 10.211.55.10/24 # 說(shuō)明配置生效 # 節(jié)點(diǎn)安裝工具 yum install -y nfs-utils # 節(jié)點(diǎn)安裝完畢后 showmount -e yz10 # 掛載文件 mkdir -p /mnt/www-data mount yz10:/usr/local/data/www-data /mnt/www-data
# 查看deployment kubectl get deployment # 刪除部署,服務(wù)service kubectl delete deployment tomcat-deploy kubectl delete service tomcat-service # 重新部署掛載 vi tomcat-deploy.yml # 修改部署文件
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tomcat-deploy spec: replicas: 2 template: metadata: labels: app: tomcat-cluster spec: volumes: - name: webapp hostPath: path: /mnt/www-data containers: - name: tomcat-cluster image: tomcat ports: - containerPort: 8080 volumeMounts: - name: webapp mountPath: /usr/local/tomcat/webapps
# 進(jìn)入pod查看掛載是否成功 kubectl exec -it tomcat-deploy-6dcc5c59c-hg5z7 bash
vi tomcat-service.yml 修改服務(wù)文件
apiVersion: v1 kind: Service metadata: name: tomcat-service labels: app: tomcat-service spec: # type: NodePort selector: app: tomcat-cluster ports: - port: 18010 targetPort: 8080 # nodePort: 32500
# 創(chuàng)建服務(wù) kubectl create -f tomcat-service.yml # 在www-data 創(chuàng)建一個(gè)test目錄創(chuàng)建文件 vi index.jsp <%=request.getLocalAddr()%> # 訪問(wèn) curl http://10.97.80.216:18010/test/index.jsp
可以觀察到隨機(jī)負(fù)載均衡的效果。
端口轉(zhuǎn)發(fā)工具 Rinetd
Rinetd 是Linux操作系統(tǒng)中為重定向傳輸控制協(xié)議工具
可以將源ip端口數(shù)據(jù)轉(zhuǎn)發(fā)到目標(biāo)ip端口
在k8s中用于將service服務(wù)對(duì)外暴露
# 宿主機(jī)安裝Rinted cd /usr/local http://www.rinetd.com/download/rinetd.tar.gz cd rinetd sed -i 's/65536/65535/g' rinetd.c mkdir -p /usr/man/ yum install -y gcc make && make install # 編寫(xiě)端口映射配置 vi /etc/rinetd.conf 0.0.0.0 18010 10.97.80.216 18010 # 加載配置 rinetd -c /etc/rinetd.conf # 測(cè)試外部訪問(wèn),已經(jīng)可以通了 http://yz10:18010/test/
k8s部署調(diào)整命令
更新集群配置: kubectl apply -f yml文件
刪除部署|服務(wù)|pod
kubectl delete deployment | service | pod 名稱
資源限定
containers: - name: tomcat-cluster image: tomcat resources: requests: # 需要的資源 cpu: 1 memory: 500Mi limits: # 限制的資源 cpu: 2 # cpu不一定是整數(shù) memory: 1024Mi
到此,關(guān)于“k8s的安裝與簡(jiǎn)單使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!