1. 程式人生 > >基於Kubeadm搭建Kubernetes v1.10.0全記錄

基於Kubeadm搭建Kubernetes v1.10.0全記錄

本文主要目的在於記錄個人在配置K8S叢集的步驟,以及遇到的問題和相應的解決方案,內容從叢集搭建到Kubernetes-Dashboard安裝,角色許可權配置為止。先簡單介紹下環境,4個節點的情況如下:
節點名IPOS安裝軟體
Master10.211.55.6Centos7kubeadm,kubelet,kubectl,docker
Node110.211.55.7Centos7kubeadm,kubelet,kubectl,docker
Node210.211.55.8Centos7kubeadm,kubelet,kubectl,docker
Node310.211.55.9Centos7kubeadm,kubelet,kubectl,docker
其中kubeadm,kubectl,kubelet的版本為v1.10.0,docker的版本為1.13.1。一.各節點前期的準備工作:1.關閉並停用防火牆    systemctl stop firewalld.service
    systemctl disable firewalld.service2.永久關閉SELinux    vim /etc/selinux/config    SELINUX=disabled3.同步集群系統時間    yum -y install ntp4.重啟機器    reboot二.軟體安裝與配置:注意⚠️:軟體源按需配置,下面給出3個源,其中kubernetes yum源必須配置,docker源如果需要安裝docker-ce版本則需要安裝,否則最高支援1.13.1版本。
#阿里雲yum源:    yum clean all    yum makecache
#docker yum源    cat >> /etc/yum.repos.d/docker.repo <<EOF    [docker-repo]    name=Docker Repository    enabled=1    gpgcheck=0    EOF
#kubernetes yum源    cat >> /etc/yum.repos.d/kubernetes.repo <<EOF    [kubernetes]    name=Kubernetes    enabled=1    gpgcheck=0    EOF
配置完源,安裝軟體:    yum -y install docker kubeadm kubelet kubectl關閉SWAP    swapoff -a啟動docker並設為開機啟動:    systemctl start docker    systemctl enable docker引數配置:kubelet的cgroup驅動引數需要和docker使用的一致,先查詢下docker的cgroup驅動引數:    docker info |grep cgroup
在docker v1.13.1下,該引數預設為systemd,所以更改kubelet的配置引數:    sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf載入配置,啟動kubelet:    systemctl daemon-reload    systemctl start kubelet注意⚠️在啟動kubeadm之前,一定要先啟動kubelet,否則會顯示連線不上。下面開始,分別操作Master節點和Node節點:啟動Master節點:    kubeadm init --kubernetes-version=1.10.0 --token-ttl 0 --pod-network-cidr=10.244.0.0/16該命令表示kubenetes叢集版本號為v1.10.0,token的有效時間為0表示永久有效,容器的網路段為10.244.0.0/16,由於kubeadm安裝方式只能用於建立最小可用叢集,所以很多addon是沒有整合的,包括網路外掛,需要之後安裝,但網段引數需要先行配置。注意⚠️:kubenetes目前的版本較之老版本,最大區別在於核心元件都已經容器化,所以安裝的過程是會自動pull映象的,但是由於映象基本都存放於谷歌的伺服器,牆內使用者是無法下載,導致安裝程序卡在[init] This often takes around a minute; or longer if the control plane images have to be pulled ,這裡我提供兩個思路:1.有個牆外的代理伺服器,對docker配置代理,需修改/etc/sysconfig/docker檔案,新增:HTTP_PROXY=http://proxy_ip:porthttp_proxy=$HTTP_PROXY   重啟docker:systemctl restart docker2.事先下載好所有映象,下面我給出v1.10.0版本基本安裝下所需要的所有映象(其他版本所需的映象版本可能不同,以官方文件為準):
Master節點所需映象:
k8s.gcr.io/kube-apiserver-amd64:v1.10.0k8s.gcr.io/kube-scheduler-amd64:v1.10.0k8s.gcr.io/kube-controller-manager-amd64:v1.10.0k8s.gcr.io/kube-proxy-amd64:v1.10.0k8s.gcr.io/etcd-amd64:3.1.12k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.8k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8k8s.gcr.io/pause-amd64:3.1quay.io/coreos/flannel:v0.9.1-amd64 (為網路外掛的映象,這裡選擇flannel為網路外掛)
Node節點所需映象:
k8s.gcr.io/kube-proxy-amd64:v1.10.0k8s.gcr.io/pause-amd64:3.1quay.io/coreos/flannel:v0.9.1-amd64(為網路外掛的映象,這裡選擇flannel為網路外掛)
Master節點安裝成功會輸出如下內容:[init] Using Kubernetes version: v1.10.0...[init] This often takes around a minute; or longer if the control plane images have to be pulled.[apiclient] All control plane components are healthy after 39.511972 seconds[uploadconfig] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace[markmaster] Will mark node master as master by adding a label and a taint[markmaster] Master master tainted and labelled with key/value:node-role.kubernetes.io/master=""[bootstraptoken] Using token: <token>[bootstraptoken] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials[bootstraptoken] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token[bootstraptoken] Creating the "cluster-info" ConfigMap in the "kube-public" namespace[addons] Applied essential addon: kube-dns[addons] Applied essential addon: kube-proxyYour Kubernetes master has initialized successfully!To start using your cluster, you need to run (as a regular user):  mkdir -p $HOME/.kube  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  sudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster.Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:You can now join any number of machines by running the following on each nodeas root:  kubeadm join 10.211.55.6:6443 --token 63nuhu.quu72c0hl95hc82m --discovery-token-ca-cert-hash sha256:3971ae49e7e5884bf191851096e39d8e28c0b77718bb2a413638057da66ed30a其中    kubeadm join 10.211.55.6:6443 --token 63nuhu.quu72c0hl95hc82m --discovery-token-ca-cert-hash sha256:3971ae49e7e5884bf191851096e39d8e28c0b77718bb2a413638057da66ed30a是後續節點加入叢集的啟動命令,由於設定了--token-ttl 0,所以該命令永久有效,需儲存好,kubeadm token list命令可以輸出token,但不能輸出完整命令,需要做hash轉換。注意⚠️:叢集啟動後要獲取叢集的使用許可權,否則在master節點執行kubectl get nodes命令,會反饋localhost:8080 connection refused,獲取許可權方法如下:
Root使用者:export KUBECONFIG=/etc/kubernetes/admin.conf
非Root使用者:mkdir -p $HOME/.kubesudocp-i/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/config
三.安裝網路外掛Pod:在成功啟動Master節點後,在新增node節點之前,需要先安裝網路管理外掛,kubernetes可供選擇的網路外掛有很多,Calico,Canal,flannel,Kube-router,Romana,Weave Net 各種安裝教程可以參考官方文件,點選這裡本文選擇flannel作為網路外掛:    vim /etc/sysctl.conf,新增以下內容    net.ipv4.ip_forward=1    net.bridge.bridge-nf-call-iptables=1    net.bridge.bridge-nf-call-ip6tables=1    修改後,及時生效    sysctl -p執行安裝:  kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml安裝完成後,執行:kubectl get pods --all-namespaces檢視Pod的啟動狀態,一旦kube-dns Pod的啟動狀態為UP或者Running,叢集就可以開始新增節點了。四.新增Node節點:啟動Node節點加入叢集只需啟動kubelet,然後執行之前儲存的命令:    systemctl start kubeletkubeadm join 10.211.55.6:6443 --token 63nuhu.quu72c0hl95hc82m --discovery-token-ca-cert-hash sha256:3971ae49e7e5884bf191851096e39d8e28c0b77718bb2a413638057da66ed30a節點成功加入叢集。在主節點執行kubectl get nodes,驗證叢集狀態,顯示如下:[[email protected] ~]# kubectl get nodesNAME      STATUS    ROLES     AGE       VERSIONmaster    Ready     master    7h        v1.10.0node1     Ready     <none>    6h        v1.10.0node2     Ready     <none>    2h        v1.10.0node3     Ready     <none>    4h        v1.10.0Kubenetes v1.10.0 叢集構建完成!五.Kubernetes-Dashboard(WebUI)的安裝:和網路外掛的用法一樣,dashboard也是一個容器應用,同樣執行安裝yaml:kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml可以參考官方文件,點選這裡安裝完成後,執行:kubectl get pods --all-namespaces檢視Pod的啟動狀態,kubernetes-dashboard啟動完成後,執行:kubectl proxy --address=10.211.55.6 --accept-hosts='^*$'基本引數是address為master節點的IP,access-host如果不填,開啟web頁面會返回:    <h3>unauthorized<h3>啟動後控制檯輸出:    Starting to serve on 10.211.55.6:8001開啟WebUI:    http://10.211.55.6:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/overview?namespace=default見如下頁面:
這是需要用一個可用的ClusterRole進行登入,該賬戶需要有相關的叢集操作許可權,如果跳過,則是用預設的系統角色kubernetes-dashboard(該角色在建立該容器時生成),初始狀態下該角色沒有任何許可權,需要在系統中進行配置,角色繫結:在主節點上任意位置建立一個檔案xxx.yaml,名字隨意:    vim ClusterRoleBinding.yaml    編輯檔案:    kind: ClusterRoleBinding    apiVersion: rbac.authorization.k8s.io/v1beta1    metadata:      name: kubernetes-dashboard    subjects:      - kind: ServiceAccount        name: kubernetes-dashboard        namespace: kube-system    roleRef:      kind: ClusterRole      name: cluster-admin      apiGroup: rbac.authorization.k8s.io儲存,退出,執行該檔案:    kubectl create -f ClusterRoleBinding.yaml再次開啟WebUI,成功顯示叢集資訊:
注意⚠️:給kubernetes-dashboard角色賦予cluster-admin許可權僅供測試使用,本身這種方式並不安全,建議新建一個系統角色,分配有限的叢集操作許可權,方法如下:新建一個yaml檔案,寫入:kind: ClusterRole #建立叢集角色apiVersion: rbac.authorization.k8s.io/v1beta1metadata:  name: dashboard  #角色名稱rules:- apiGroups: ["*"]  resources: ["*”] #所有資源  verbs: ["get""watch""list""create","proxy","update”] #賦予獲取,監聽,列表,建立,代理,更新的許可權- apiGroups: ["*"]  resources: ["pods”] #容器資源單獨配置(在所有資源配置的基礎上)  verbs: ["delete”] #提供刪除許可權---apiVersion: v1kind: ServiceAccount  #建立ServiceAccountmetadata:  name: dashboardnamespace: kube-system---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1beta1metadata:  name: dashboard-extendedsubjects:-kind: ServiceAccount    name: dashboardnamespace: kube-systemroleRef:  kind: ClusterRole  name:dashboard  #填寫cluster-admin代表開放全部許可權  apiGroup: rbac.authorization.k8s.io執行該檔案,檢視角色是否生成:    kubectl get serviceaccount --all-namespaces查詢該賬戶的金鑰名:        kubectl get secret  -n kube-system根據金鑰名找到token:        kubectl discribe secret dashboard-token-wd9rz -n kube-system
輸出一段資訊:將此token用於登陸WebUI即可。
以上便是Kubeadm安裝K8S v1.10.0版本的全記錄,本文用於總結與梳理,參考於官方文件,如有錯漏,望予指正。附錄:

相關推薦

基於Kubeadm搭建Kubernetes v1.10.0記錄

本文主要目的在於記錄個人在配置K8S叢集的步驟,以及遇到的問題和相應的解決方案,內容從叢集搭建到Kubernetes-Dashboard安裝,角色許可權配置為止。先簡單介紹下環境,4個節點的情況如下:節點名IPOS安裝軟體Master10.211.55.6Centos7kub

使用kubeadm安裝Kubernetes v1.10以及常見問題解答_Kubernetes中文社群

關於K8S: Kubernetes是Google開源的容器叢集管理系統。它構建於docker技術之上,為容器化的應用提供資源排程、部署執行、服務發現、擴 容縮容等整一套功能,本質上可看作是基於容器技術的mini-PaaS平臺。 相信看過我部落格的童鞋應該知道,我在14年的時候就發表了一篇名為D

深入玩轉K8S之使用kubeadm安裝Kubernetes v1.10以及常見問題解答

關於K8S:Kubernetes是Google開源的容器叢集管理系統。它構建於docker技術之上,為容器化的應用提供資源排程、部署執行、服務發現、擴 容縮容等整一套功能,本質上可看作是基於容器技術的mini-PaaS平臺。相信看過我部落格的童鞋應該知道,我在14年的時候就發

使用kubeadm安裝Kubernetes v1.10 之 centos 7.4

2、安裝請選擇最小核安裝即可(minimal)。3、使用 root 使用者登入虛擬機器,進入到 /etc/sysconfig/network-scripts/ 目錄下,檢視虛擬機器的網絡卡設定,使用 vi 開啟 ifcfg- 開頭的檔案( - 後邊為網絡卡名稱) ,開啟之後,

kubeadm搭建k8s v1.10.13

開發十年,就只剩下這套架構體系了! >>>   

k8s Kubernetes v1.10 單節點 kubeadm 快速安裝

ger label ID info manage Kubernete labels pod 容器管理 k8s Kubernetes v1.10 單節點 kubeadm 快速安裝 # Master 單節點快速安裝 # 傻瓜式安裝,只為快速部署測試環境 #測試環境centos

kubeadm創建高可用kubernetes v1.12.0集群

架構 r.js 慎用 led validate block boot ade 組件通信 節點規劃 主機名 IP Role k8s-master01 10.3.1.20 etcd、Master、Node、keepalived k8s-master02 10.

kubeadm HA master(v1.11.0)叢集搭建指南(離線包 + 自動化指令碼 + ipvs + keepalived + calico)_Kubernetes中文社群

0x00 文章楔子 本文旨在通過最簡易的方式指導讀者搭建HA kubernetes 1.11叢集 通過部署指令碼驅動kubeadm工具進行自動化部署,自動啟動keepalived負載均衡,calico網路外掛,並且開啟kube-proxy的IPVS模式。 本文中的自動化部署指令碼可以在Lent

Kubeadm建立高可用Kubernetes v1.12.0叢集 (轉)

節點規劃 主機名 IP Role k8s-master01 10.3.1.20 etcd、Master、Node、keepalived k8s-master02 10.3.1.21 etcd、Master、Node、keepa

Kubernetes v1.10.x HA 手動安裝教程(TL;DR)_Kubernetes中文社群

本篇延續過往手動安裝方式來部署 Kubernetes v1.10.x 版本的 High Availability 叢集,主要目的是學習 Kubernetes 安裝的一些元件關析與流程。若不想這麼累的話,可以參考 Picking the Right Solution 來選擇自己最喜歡的方式。 本

在滴滴雲上學習 Kubernetes v1.13.0:叢集搭建

前言 Kubernetes 1.13 在 2018 年 12 初 GA,這是今年的第四次也是最後一次大版本。此版本繼續關注 Kubernetes 的穩定性和可擴充套件性,其中在儲存和群集生命週期領域的三個主要功能實現普遍可用(GA);Kubeadm 簡化叢集管理、容器儲存介面(CSI)和

kubernetes v1.12.0叢集部署(二進位制方式+基於CA簽名雙向數字證書認證方式)

kubernetes 最簡單的方式是通過yum install kubernetes 直接安裝,但是預設安裝的是v5版本的kubernetes,所以不推薦使用,還有一種是在v1.4版本開始引入了的kubeadm工具一鍵部署,但是如果 沒有訪問gcr.io的網路環境的話部署過程

Kubernetes v1.10+Keepalived HA集群墻內部署實踐

Kubernetes導讀:眾所周知,K8S安裝難點在於鏡像下載。查詢網上許多關於K8S安裝部署的文章,作者要麽是將鏡像下載使用的工作交給了讀者完成,要麽是放在共享雲盤中,由讀者下載後導入使用。都知道,如果你不是該雲盤提供商的會員,鏡像下載速度堪比蝸牛。總之,三個字:”不方便“。基於最大化便利剛接觸K8S的同行

Kubernetes v1.10----部署kubernetes-dashboard v1.83

https rec 編輯 技術分享 proxy version create command ces Kubernetes v1.10----部署kubernetes-dashboard v1.83 1.下載 kubernetes-dashboard yaml文件 #

Kubadem方式安裝Kubernetes(1.10.0)集群

k8s 部署 背景 kubernetes已經是現有的docker容器管理工具中必學的一個架構了,相對與swarm來說,它的架構更重,組件和配置也更復雜,當然了,提供的功能也更加強大。在這裏,k8s的基本概念和架構就不描述了,網上有很多的資料可供參考。 在技術的驅使下,我們公司也不可

Kubernetes 1.10.0離線安裝

mkfs.ext4 _for amd64 fir fdisk -l chown 部分 strong get 講述如何通過離線的方式安裝Kubernetes,主要用於對Kubernetes的研究學習,不建議在生產環境使用,安裝包獲取地址: 鏈接:https://

kubernetes V1.10.4 集群部署 (手動生成證書)

nbsp namespace owin 服務器初始 row lse uber air sam 說明:本文檔涉及docker鏡像,yaml文件下載地址鏈接:https://pan.baidu.com/s/1QuVelCG43_VbHiOs04R3-Q 密碼:70q2本文只是作

kubeadm安裝kubernetes v1.11.3 HA多主高可用並啟用ipvs

har 3.1 oba smt lec template prior yaml 應用 環境介紹: 系統版本:CentOS 7.5 內核:4.18.7-1.el7.elrepo.x86_64 Kubernetes: v1.11.3 Docker-ce: 18.06 Kee

k8s Kubernetes v1.10 最簡易安裝 shell

was blog mage flann Kubernete 概念 sel centos kubecon k8s Kubernetes v1.10 最簡易安裝 shell # Master 單節點快速安裝 # 最簡單的安裝shell,只為快速部署k8s測試環境 # 測試環境

使用Kubeadm搭建Kubernetes(1.12.2)叢集

Kubeadm是Kubernetes官方提供的用於快速安裝Kubernetes叢集的工具,伴隨Kubernetes每個版本的釋出都會同步更新,在2018年將進入GA狀態,說明離生產環境中使用的距離越來越近了。 使用Kubeadm搭建Kubernetes叢集本來是件很簡單的事,但由於眾所周知的原因,在中國大陸