Kubernetes安裝部署操作手冊(kubernetes安裝詳解)

      網友投稿 1306 2022-05-30

      Kubernetes安裝部署操作手冊

      摘要

      Kubernetes單詞起源于希臘語, 是“舵手”或者“領航員”的意思,是“管理者”和“控制論”的根源。?K8s是把用8代替8個字符“ubernete”而成的縮寫。首先,他是一個全新的基于容器技術的分布式架構領先方案。Kubernetes(k8s)是Google開源的容器集群管理系統(谷歌內部:Borg)。在Docker技術的基礎上,為容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等一系列完整功能,提高了大規模容器集群管理的便捷性。

      Kubernetes是一個完備的分布式系統支撐平臺,具有完備的集群管理能力,多擴多層次的安全防護和準入機制、多租戶應用支撐能力、透明的服務注冊和發現機制、內建智能負載均衡器、強大的故障發現和自我修復能力、服務滾動升級和在線擴容能力、可擴展的資源自動調度機制以及多粒度的資源配額管理能力。

      關鍵詞:Kubernetes;自我修復;滾動升級;動態伸縮

      目錄

      總頁數:19頁

      初識kubernetes 1

      1.1kubernetes簡介 1

      1.2kubernetes特征 1

      1.3核心組件 1

      1.4拓撲圖 1

      集群 2

      2.1環境介紹 2

      2.2安裝必要的組件 2

      2.2.1安裝docker 2

      2.2.2安裝集群組件 3

      2.2使用kubeadm初始化集群 4

      2.3加入集群 4

      驗證 5

      3.1驗證集群節點 5

      3.2驗證pod信息 5

      部署 5

      4.1 deployment 5

      4.2 Service 7

      升級 8

      5.1查看當前鏡像版本 8

      5.2更新鏡像 8

      回滾 9

      6.1查看歷史版本 9

      6.2回滾版本 9

      Dashborad 10

      7.1鏡像準備 10

      7.2編寫dashborad.yaml 10

      7.3創建和修改 15

      7.4創建ServiceAccount 16

      7.5登錄UI 17

      1.?初識kubernetes

      1.1kubernetes簡介

      Kubernetes是一個全新的基于容器技術的分布式架構領先方案。是Google內部集群管理系統Borg的一個開源版本。直到2015年4月,隨著論文發布,才被眾人熟知。Kubernetes是一個開放的開發平臺。不局限于任何一種語言,沒有限定任何編程接口。是一個完備的分布式系統支撐平臺。它構建在docker之上,提供應用部署、維護、擴展機制等功能,利用Kubernetes能方便地管理跨機器運行容器化的應用。

      1.2kubernetes特征

      自主的管理容器,保證云平臺中的容器按照用戶的期望狀態運行著。

      自動擴容,彈性伸縮。

      自動監控,刪除出故障的應用。

      容器編排成組,并提供容器間的負載均衡。

      自我調度,自我管理。

      1.3核心組件

      kubectl:客戶端命令行工具,作為整個系統的操作入口。

      kube-apiserver:以REST API服務形式提供接口,作為整個系統的控制入口。

      kube-controller-manager:執行整個系統的后臺任務,包括節點狀態狀況、Pod個數、Pods和Service的關聯等。

      kube-scheduler:負責節點資源管理,接收來自kube-apiserver創建Pods任務,并分配到某個節點。

      etcd:負責節點間的服務發現和配置共享。

      kube-proxy:運行在每個計算節點上,負責Pod網絡代理。定時從etcd獲取到service信息來做相應的策略。

      kubelet:運行在每個計算節點上,作為agent,接收分配該節點的Pods任務及管理容器,周期性獲取容器狀態,反饋給kube-apiserver。

      1.4拓撲圖

      2.?集群

      2.1環境介紹

      192.168.2.5 k8s-master 4G 2核

      192.168.2.6 k8s-node ?4G 2核

      2.2安裝必要的組件

      2.2.1安裝docker

      在每個節點執行

      1.添加阿里yum源

      sudo yum-config-manager --add-repo

      http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

      2.生成緩存

      yum makecache fast

      安裝docker-ce

      yum -y install docker-ce

      3.啟動docker并設置為開機啟動

      systemctl start docker && systemctl enable docker

      2.2.2安裝集群組件

      每個節點執行

      修改hosts文件

      vim /etc/hosts 添加以下信息

      192.168.2.5 k8s-master

      182.168.2.6 k8s-node

      2.分別在不同主機上設置hostname

      hostnamectl --static set-hostname k8s-master

      hostnamectl --static set-hostname k8s-node

      3.關掉 selinux

      setenforce ?0

      sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux

      4.關掉防火墻

      systemctl stop firewalld

      systemctl disable firewalld

      5.關閉 swap

      swapoff -a

      sed -i 's/.*swap.*/#&/' /etc/fstab

      6.配置轉發參數

      cat < /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF

      sysctl --system

      7.配置國內yum源并生成緩存

      cat < /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF

      yum makecache fast

      8.安裝kubeadm,kubectl,kubelet,ntpdate

      yum install -y kubeadm kubectl kubelet ntpdate

      systemctl start kubelet && systemctl enable kubelet

      2.2使用kubeadm初始化集群

      在master上面執行一下命令,初始化集群信息

      kubeadm init ?--image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

      等待初始化完成后,系統提示我們執行一下三步:

      mkdir -p $HOME/.kube

      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

      sudo chown $(id -u):$(id -g) $HOME/.kube/config

      并且初始化完成后,我們將token拷貝下來保存,后來加入node使用

      kubeadm join 192.168.2.5:6443 --token 6pq12p.qolwnkesr8nu3ger --discovery-token-ca-cert-hash sha256:eb1dcad8d31fd03c4cf9ab0476c360da13b2204e01885ca8f98eafd43345ee8d

      加入flannel:

      kubectl apply -f

      https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

      注意:

      這里有一個鏡像拉取不下來我們手動拉取國內,并給改鏡像打一個標簽

      docker pull registry.cn-hangzhou.aliyuncs.com/kubernetes_containers/flannel:v0.10.0-amd64

      docker tag registry.cn-hangzhou.aliyuncs.com/kubernetes_containers/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64

      2.3加入集群

      在node上面執行之前生成的token

      kubeadm join 192.168.2.5:6443 --token 6pq12p.qolwnkesr8nu3ger --discovery-token-ca-cert-hash sha256:eb1dcad8d31fd03c4cf9ab0476c360da13b2204e01885ca8f98eafd43345ee8d

      3.?驗證

      3.1驗證集群節點

      上面執行完命令后,集群不會馬上變成ready狀態,因為系統需要去下載docker鏡像,稍等片刻后我們可以執行一下命令驗證集群狀態。

      Kubectl get node

      或者

      Kubectl get node -o wide顯示更新信息

      當所有節點都變成ready后,表示集群搭建完成。

      3.2驗證pod信息

      kubectl get pod -n kube-system

      當所有pod的ready都變成1/1就表示集群搭建成功。

      4.?部署

      4.1 deployment

      一次deployment為一次部署,如圖Deployment調用ReplicaSet創建多個Pod副本。而ReplicaSet不需要我們去管理,所以我們只需要創建一個deployment即可。我們編寫一個nginx-deployment.yaml。

      apiVersion: 組名/版本號

      Kind: 類型

      Metadata: 元數據,下面name表示當前deployment名稱為nginx-deployment

      Spec: 規格

      Replicas:3表示副本集3個

      Spec.template.metadata.labels 自定義標簽,一般配合selector

      spec.template.containers:可以有多個容器

      - name 表示容器[1]的名字

      Image: 使用鏡像nginx:1.7.9

      containerPort: 容器端口80

      執行kubectl apply -f nginx-deployment.yaml即可創建deployment

      查看deployment:

      kubectl get deploy/deployment/deployments

      查看pod:

      Kubectl get pod

      此時pod顯示正在創建,因為鏡像需要去pull下來。

      等待一段時間后,我們的pod已經跑起來了。

      此時我們使用-o wide查看ip,此時的應用只有集群內部能訪問,外部暫時不能訪問。使用一個ip在任何一個節點都可以訪問。

      4.2 Service

      Service定義了一個服務的訪問入口地址,前端的應用通過這個入口地址訪問其背后的一組由Pod副本組成的集群實例,來自外部的訪問請求被負載均衡到后端的各個容器應用上。Service與其后端Pod副本集群之間則是通過Label Selector來實現對接的.

      nginx-svc.yaml

      這里我們講一下selector,選擇的是之前deployment,labels定義的標簽。

      創建Service:kubectl apply -f nginx-svc.yaml

      查看service:kubectl get svc/service

      因為我們的type指定的是NodePort所以我們現在可以直接在瀏覽器使用任意節點ip+30565訪問。并且我們指定的pod有3個,他每次會根據負載策略去訪問三個pod中的任意一個。

      5.?升級

      5.1查看當前鏡像版本

      Kubectl get pod

      Kubectl describe pod podName

      看了看到image: nginx:1.7.9

      5.2更新鏡像

      Kubectl set image deploy/nginx-deployment nginx=nginx:1.10 --record

      Kubectl get pod 可以看到之前的pod并不會被馬上終止,而是一步步新運行一個,終止一個,達到灰度發布,不重啟服務器更新的目的。稍等片刻后我們就可以看到之前的3個pod全部被替換。

      緊著我們查看pod信息,運行正常,版本也成功更新到1.10

      6.?回滾

      6.1查看歷史版本

      Kubectl rollout history deploy/nginx-deployment

      可以看到以上有1和2兩個版本,1表示之前的,2表示當前的,可能有2,3,4那么最新的就表示當前版本。接著我們回滾一下。

      6.2回滾版本

      回滾到上一個版本:

      Kubectl rollout undo deploy/nginx-deployment

      回滾到指定版本:

      Kubectl rollout undo deploy/nginx-deployment --to-revision=2

      我們回滾到上一個版本試試,可以看到我們鏡像版本已經回退到之前的1.7.9了。也是逐個替換,滾動更新。

      7.?Dashborad

      7.1鏡像準備

      因為k8s鏡像都是需要從國外下載,我們需要先準備國內鏡像。

      注意:每個節點,包括master和node節點。

      vim dashborad-image.sh

      #/bin/bash

      docker pull registry.cn-shanghai.aliyuncs.com/qubit/kubernetes-dashboard-amd64:v1.10.0

      docker tag registry.cn-shanghai.aliyuncs.com/qubit/kubernetes-dashboard-amd64:v1.10.0 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1

      docker image rm registry.cn-shanghai.aliyuncs.com/qubit/kubernetes-dashboard-amd64:v1.10.0

      chmod +x image.sh ; sh image.sh

      7.2編寫dashborad.yaml

      # Copyright 2017 The Kubernetes Authors.

      #

      # Licensed under the Apache License, Version 2.0 (the "License");

      # you may not use this file except in compliance with the License.

      # You may obtain a copy of the License at

      #

      # ????http://www.apache.org/licenses/LICENSE-2.0

      #

      # Unless required by applicable law or agreed to in writing, software

      # distributed under the License is distributed on an "AS IS" BASIS,

      # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

      # See the License for the specific language governing permissions and

      # limitations under the License.

      # ------------------- Dashboard Secret ------------------- #

      apiVersion: v1

      kind: Secret

      metadata:

      labels:

      k8s-app: kubernetes-dashboard

      name: kubernetes-dashboard-certs

      namespace: kube-system

      type: Opaque

      ---

      # ------------------- Dashboard Service Account ------------------- #

      apiVersion: v1

      kind: ServiceAccount

      metadata:

      labels:

      k8s-app: kubernetes-dashboard

      name: kubernetes-dashboard

      namespace: kube-system

      ---

      # ------------------- Dashboard Role & Role Binding ------------------- #

      kind: Role

      apiVersion: rbac.authorization.k8s.io/v1

      metadata:

      name: kubernetes-dashboard-minimal

      namespace: kube-system

      rules:

      # Allow Dashboard to create 'kubernetes-dashboard-key-holder' secret.

      - apiGroups: [""]

      resources: ["secrets"]

      verbs: ["create"]

      # Allow Dashboard to create 'kubernetes-dashboard-settings' config map.

      - apiGroups: [""]

      resources: ["configmaps"]

      verbs: ["create"]

      # Allow Dashboard to get, update and delete Dashboard exclusive secrets.

      - apiGroups: [""]

      resources: ["secrets"]

      resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs"]

      verbs: ["get", "update", "delete"]

      # Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.

      - apiGroups: [""]

      resources: ["configmaps"]

      resourceNames: ["kubernetes-dashboard-settings"]

      verbs: ["get", "update"]

      # Allow Dashboard to get metrics from heapster.

      - apiGroups: [""]

      resources: ["services"]

      resourceNames: ["heapster"]

      verbs: ["proxy"]

      - apiGroups: [""]

      resources: ["services/proxy"]

      resourceNames: ["heapster", "http:heapster:", "https:heapster:"]

      verbs: ["get"]

      ---

      apiVersion: rbac.authorization.k8s.io/v1

      kind: RoleBinding

      metadata:

      name: kubernetes-dashboard-minimal

      namespace: kube-system

      roleRef:

      apiGroup: rbac.authorization.k8s.io

      kind: Role

      name: kubernetes-dashboard-minimal

      subjects:

      - kind: ServiceAccount

      name: kubernetes-dashboard

      namespace: kube-system

      ---

      # ------------------- Dashboard Deployment ------------------- #

      kind: Deployment

      apiVersion: apps/v1

      metadata:

      labels:

      k8s-app: kubernetes-dashboard

      name: kubernetes-dashboard

      namespace: kube-system

      spec:

      replicas: 1

      revisionHistoryLimit: 10

      selector:

      matchLabels:

      k8s-app: kubernetes-dashboard

      template:

      Kubernetes安裝部署操作手冊(kubernetes安裝詳解)

      metadata:

      labels:

      k8s-app: kubernetes-dashboard

      spec:

      containers:

      - name: kubernetes-dashboard

      image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1

      ports:

      - containerPort: 8443

      protocol: TCP

      args:

      - --auto-generate-certificates

      # Uncomment the following line to manually specify Kubernetes API server Host

      # If not specified, Dashboard will attempt to auto discover the API server and connect

      # to it. Uncomment only if the default does not work.

      # - --apiserver-host=http://my-address:port

      volumeMounts:

      - name: kubernetes-dashboard-certs

      mountPath: /certs

      # Create on-disk volume to store exec logs

      - mountPath: /tmp

      name: tmp-volume

      livenessProbe:

      httpGet:

      scheme: HTTPS

      path: /

      port: 8443

      initialDelaySeconds: 30

      timeoutSeconds: 30

      volumes:

      - name: kubernetes-dashboard-certs

      secret:

      secretName: kubernetes-dashboard-certs

      - name: tmp-volume

      emptyDir: {}

      serviceAccountName: kubernetes-dashboard

      # Comment the following tolerations if Dashboard must not be deployed on master

      tolerations:

      - key: node-role.kubernetes.io/master

      effect: NoSchedule

      ---

      # ------------------- Dashboard Service ------------------- #

      kind: Service

      apiVersion: v1

      metadata:

      labels:

      k8s-app: kubernetes-dashboard

      name: kubernetes-dashboard

      namespace: kube-system

      spec:

      ports:

      - port: 443

      targetPort: 8443

      selector:

      k8s-app: kubernetes-dashboard

      7.3創建和修改

      創建:Kubectl create -f dashborad.yaml

      因為創建出來的service默認是ClusterIP,只能集群內訪問,修改一下類型

      需要改成NodePort。

      kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system

      查看一下service

      Kubectl get svc -n kube-system

      這里我們對外暴露的端口是31141,此時我們可以直接用https://master_ip:31141來訪問,這個端口是隨機的默認是30000-32767

      注意:我們只能用firefox瀏覽器

      此時還不能直接訪問,我們還需要添加一個授權管理的用戶。

      7.4創建ServiceAccount

      vim admin-user.yaml

      apiVersion: v1

      kind: ServiceAccount

      metadata:

      labels:

      k8s-app: kubernetes-dashboard

      name: admin

      namespace: kube-system

      ---

      apiVersion: rbac.authorization.k8s.io/v1

      kind: ClusterRoleBinding

      metadata:

      name: admin

      roleRef:

      apiGroup: rbac.authorization.k8s.io

      kind: ClusterRole

      name: cluster-admin

      subjects:

      - kind: ServiceAccount

      name: admin

      namespace: kube-system

      創建:kubectl create -f admin-user.yaml

      查看svc:kubectl describe serviceaccount admin -n kube-system

      此時會有一個tokens的描述

      查看token:kubectl describe secret tokens描述 -n kube-system

      此時我們拷貝生成的token。

      7.5登錄UI

      此時輸入https://master_ip:31141

      此時我們選擇高級,添加例外,然后選擇token,將上面的token黏貼后即可登錄。

      附件: k8s集群部署操作手冊.docx 583.48KB 下載次數:3次

      Docker Kubernetes

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:MapReduce多種輸入格式(默認的mapreduce輸入格式)
      下一篇:K8s Operator 開發之 kubebuilder 實戰(k8s和docker區別)
      相關文章
      国产国拍亚洲精品福利| 亚洲精品无码人妻无码 | 亚洲人xxx日本人18| 国产亚洲3p无码一区二区| 久久亚洲中文字幕无码| 亚洲小视频在线播放| 亚洲夜夜欢A∨一区二区三区| 亚洲性无码AV中文字幕| 亚洲国产成人精品电影| 久久精品国产亚洲av麻豆| 亚洲AV无码一区二区三区在线观看 | 亚洲成在人线在线播放无码| 亚洲欧美国产精品专区久久| 亚洲国产成人精品无码区二本 | 亚洲国产精品自在线一区二区| 亚洲国产另类久久久精品黑人| 亚洲狠狠婷婷综合久久久久| 国产精品亚洲产品一区二区三区| 亚洲AV成人精品日韩一区18p| 亚洲av再在线观看| 国产精品亚洲专区一区| 亚洲福利秒拍一区二区| 18gay台湾男同亚洲男同| 国产成人无码综合亚洲日韩 | 亚洲av无码专区亚洲av不卡| 在线观看亚洲视频| 亚洲av午夜国产精品无码中文字| 在线观看亚洲视频| 伊人久久精品亚洲午夜| 久久精品国产亚洲AV麻豆不卡| 亚洲精品国产成人99久久| 亚洲最大成人网色| 亚洲一区中文字幕| 亚洲国产精华液2020| 亚洲国产成人影院播放| 亚洲色自偷自拍另类小说| 亚洲中文字幕无码一久久区| 男人天堂2018亚洲男人天堂| 亚洲人AV在线无码影院观看| 亚洲av日韩av欧v在线天堂| 国产专区一va亚洲v天堂|