k8s安裝與使用入門

1. 內容編排與kubernetes介紹

  • 支持集羣環境內容編排的工具kubernetes 簡稱k8s.
  • k8s是谷歌官方提供的,底層基於docker,與docker-swarm是競爭關係。
  • 集羣容器管理領域幾乎都是採用的k8s。

k8s的職責node

  • 自動化容器的部署和複製
  • 隨時擴展或收縮容器規模
  • 容器分組Group,而且提供容器間的負載均衡
  • 實時監控,即時故障發現,自動替換

2.k8s基本概念

img

  • k8s Master 主節點
  • Node 節點
  • Service 服務
  • Replication Controller 複製控制器
  • Label 標籤
  • Container 容器
  • Pod k8s最小控制單元

Masterlinux

​ Master是集羣的網關和中樞樞紐,主要做用:暴露API接口,跟蹤其餘服務器的健康狀態、以最優方式調度負載,以及編排其餘組件之間的通訊。單個的Master節點能夠完成全部的功能,可是考慮單點故障的痛點,生產環境中一般要部署多個Master節點,組成Cluster.web

Nodedocker

​ Node是k8s的工做節點,負責接收來自Master的工做指令,並根據指令相應地建立和銷燬Pod對象,以及調整網絡規則進行合理路由和流量轉發。生產環境中,Node節點能夠有N個。shell

Podcentos

  • pod是容器的容器,能夠包含多個Container
  • 是k8s最小的可部署的單元,一個Pod就是一個進程
  • pod內部容器的網絡互通,每一個pod都有獨立的虛擬ip
  • pod都是部署完整的應用或者模塊

pause

kubelet kube-proxy dockerapi

3. k8s安裝

國內安裝k8s途徑tomcat

  • 使用kubeadmin離線安裝
  • 使用阿里公有云平臺k8s
  • 經過yum官方倉庫
  • 二進制包形式安裝,kubeasz

3.1 安裝kubeadmin加載k8s鏡像

# 如下命令在三臺虛擬機執行 yz10  yz20  yz21
mkdir /usr/local/k8s-install
cd /usr/local/k8s-install

4. k8s離線部署

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

5. 構建k8s集羣

確保上述節點都已經安裝好了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

image

# 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服務器

image

能夠看到,集羣已經部署完畢。

6. k8s設置重啓服務

  • kubeadm 是k8s集羣快速構建工具
  • kubelet 運行在全部節點上,負責啓動pod和容器,以系統服務的形式出現
  • kubectl 是k8s命令行工具,提供指令

systemctl start kubelet

設置開機啓動 systemctl enable kubelet

7.開啓WebUI Dashboard

# 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

8.dashbord 部署tomcat集羣

工做負載 -》 建立 便可

9.deployment腳本部署tomcat集羣

  • 部署是指k8s向node節點發送指令建立容器的過程
  • k8s支持yml格式的部署腳本
  • kubectl create -f 部署文件.yml

編寫第一個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

與部署相關的經常使用命令:

  • kubectl create -f 部署文件.yml -》 建立部署
  • kubectl apply -f 部署文件.yml -》 更新部署配置
  • kubectl get pod [-o wide] -》 查看已部署pod
  • kubectl describe pod pod名稱 -》 查看pod詳細信息
  • kubectl logs [-f] pod名稱 -》 查看pod輸出日誌
# 建立tomcat容器
kubectl create -f tomcat-deploy.yml

# 查看部署
kubectl get deployment

10. 外部訪問tomcat集羣

service 服務用於對外暴露應用。

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

11. 基於NFS實現集羣文件共享

  • nfs主要是採用遠程過程調用RPC機制實現文件傳輸
  • yum install -y nfs-utils rpcbind

image-nfs

# 編輯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

12. 部署配置掛載點

# 查看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

13. 利用 Rinetd 對外提供Service以及負載均衡支持

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

image-20200902185504090

image-testjsp

能夠觀察到隨機負載均衡的效果。

端口轉發工具 Rinetd

  • Rinetd 是Linux操做系統中爲重定向傳輸控制協議工具
  • 能夠將源ip端口數據轉發到目標ip端口
  • 在k8s中用於將service服務對外暴露
# 宿主機安裝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/

14. 更新集羣配置與資源限定

k8s部署調整命令

  • 更新集羣配置: kubectl apply -f yml文件
  • 刪除部署|服務|pod
  • kubectl delete deployment | service | pod 名稱

資源限定

containers: 
- name: tomcat-cluster
  image: tomcat
  resources: 
    requests:  # 須要的資源
      cpu: 1
      memory: 500Mi
    limits:    # 限制的資源
      cpu: 2   # cpu不必定是整數
      memory: 1024Mi
本文由 奔跑的雜糧煎餅 發佈!
相關文章
相關標籤/搜索