k8s的職責node
Masterlinux
Master是集羣的網關和中樞樞紐,主要做用:暴露API接口,跟蹤其餘服務器的健康狀態、以最優方式調度負載,以及編排其餘組件之間的通訊。單個的Master節點能夠完成全部的功能,可是考慮單點故障的痛點,生產環境中一般要部署多個Master節點,組成Cluster.web
Nodedocker
Node是k8s的工做節點,負責接收來自Master的工做指令,並根據指令相應地建立和銷燬Pod對象,以及調整網絡規則進行合理路由和流量轉發。生產環境中,Node節點能夠有N個。shell
Podcentos
kubelet kube-proxy dockerapi
國內安裝k8s途徑tomcat
# 如下命令在三臺虛擬機執行 yz10 yz20 yz21 mkdir /usr/local/k8s-install cd /usr/local/k8s-install
10.211.55.10 yz10 Master節點 10.211.55.20 yz20 Node節點 10.211.55.21 yz21 Node節點
# 1. 調整時區 timedatectl set-timezone Asia/Shanghai # 2. 關閉selinux和防火牆 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0 systemctl disable firewalld systemctl stop firewalld # 3. k8sadmin鏡像下載附帶對應的docker # 4. 鏡像上傳到每一個節點 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. 確認cgroup爲 cgroupfs docker info|grep cgroup # 7. 安裝kubeadm tar -xf kube114-rpm.tar.gz cd kube114-rpm yum localinstall -y *.rpm # 8. 關閉交換區 swapoff -a #關閉 vi /etc/fstab # 註釋這行 永久關閉 #/dev/mapper/centos-swap swap swap defaults 0 0 # 9. 配置網橋 cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system # 10. 經過鏡像安裝k8s docker load -i k8s-114-images.tar.gz docker load -i flannel-dashboard.tar.gz
確保上述節點都已經安裝好了k8s。bash
# master主服務器網絡設置 kubeadm init --kubernetes-version v1.14.1 --pod-network-cidr 10.244.0.0/16 # 運行完畢後查看須要手動運行的命令 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 查看節點, 能夠看到只有一個master節點 kubectl get nodes NAME STATUS ROLES AGE VERSION yz10 NotReady master 5m21s v1.14.1 # 查看存在問題的pod kubectl get pod --all-namespaces
# pending 是須要安裝flannel網絡組件 kubectl create -f /usr/local/k8s-install/kubernetes-1.14/kube-flannel.yml # 再次查看,已經處於running狀態 kubectl get pod --all-namespaces # 查看master的token kubeadm token list # 其他節點加入master節點集羣 kubeadm join 10.211.55.10:6443 --token 63zvtd.rej4gqrhselysqsb --discovery-token-unsafe-skip-ca-verification
master節點運行: kubectl get nodes服務器
能夠看到,集羣已經部署完畢。
systemctl start kubelet
設置開機啓動 systemctl enable kubelet
# master開啓儀表盤 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 # 遇到問題能夠刪除pod,從新配置 kubectl -n kube-system delete pod/{podName}
訪問 http://宿主機ip:32000/ 便可進入dashbord
工做負載 -》 建立 便可
編寫第一個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
與部署相關的經常使用命令:
# 建立tomcat容器 kubectl create -f tomcat-deploy.yml # 查看部署 kubectl get deployment
service 服務用於對外暴露應用。
編寫服務 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
# 建立負載均衡服務 kubectl create -f tomcat-service.yml # 查看服務 kubectl get service
# 編輯nfs共享文件設置 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 # 說明配置生效 # 節點安裝工具 yum install -y nfs-utils # 節點安裝完畢後 showmount -e yz10 # 掛載文件 mkdir -p /mnt/www-data mount yz10:/usr/local/data/www-data /mnt/www-data
# 查看deployment kubectl get deployment # 刪除部署,服務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
# 進入pod查看掛載是否成功 kubectl exec -it tomcat-deploy-6dcc5c59c-hg5z7 bash
vi 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
# 建立服務 kubectl create -f tomcat-service.yml # 在www-data 建立一個test目錄建立文件 vi index.jsp <%=request.getLocalAddr()%> # 訪問 curl http://10.97.80.216:18010/test/index.jsp
能夠觀察到隨機負載均衡的效果。
端口轉發工具 Rinetd
# 宿主機安裝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 # 編寫端口映射配置 vi /etc/rinetd.conf 0.0.0.0 18010 10.97.80.216 18010 # 加載配置 rinetd -c /etc/rinetd.conf # 測試外部訪問,已經能夠通了 http://yz10:18010/test/
k8s部署調整命令
資源限定
containers: - name: tomcat-cluster image: tomcat resources: requests: # 須要的資源 cpu: 1 memory: 500Mi limits: # 限制的資源 cpu: 2 # cpu不必定是整數 memory: 1024Mi
本文由 奔跑的雜糧煎餅 發佈!