kubernetes1.13.5安裝部署


Kubernetes

一、    Kubernetes介紹

各節點所需組件

Master:docker,kubeadm,kubelet,

組件

版本

備注

Kubelet

1.13.5

組件

Kubeadm

1.13.5

組件

Kubectl

1.13.5

組件

Docker

18.0.9.3

CgroupDriver: systemd

kube-proxy

V1.13.5

鏡像

kube-controller-manager

V1.13.5

鏡像

kube-apiserver

V1.13.5

鏡像

kube-scheduler

V1.13.5

鏡像

quay.io/coreos/flannel

v0.11.0-amd64

鏡像

Coredns

1.2.6

鏡像

Etcd

3.2.24

鏡像

pause 

3.1

鏡像

節點信息

地址

角色

備注

172.18.14.90

Master

 

172.18.14.91

Node

 

172.18.14.92

node

 

 

二、    環境配置

Docker安裝省略,kubermetes1.13.5版本最高支持docker18.06這里安裝的是18.09

一、     以root用戶登陸,配置kubernetes鏡像源

 

cat <<EOF > /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

二、     禁用selinux,關閉防火牆

修改配置文件/etc/selinux/ config

SELINUX=disabled

#setenforce 0

或者

setenforce 0

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

systemctl stop firewalld

systemctl disable firewalld

 

三、     設置網橋包經IPTables,core文件生成路徑

echo """

vm.swappiness = 0

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

net.bridge.bridge-nf-call-ip6tables = 1

""" > /etc/sysctl.conf

sysctl -p

四、     同步時間

yum install -y ntpdate

ntpdate -u ntp5.aliyun.com   

#ntp1-7. aliyun.com都可以,如無法聯網則可以自建ntp服務器

五、      更新內核

升級內核(可選),1.14版本支持5.0,1.13.5可忽略警告

$ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

$ rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

上述命令為啟用elrepo倉庫,我們可以使用以下命令列出可用的系統內核相關包:

$ yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

 

之后,就可以安裝最新的穩定內核:

$ yum --enablerepo=elrepo-kernel install kernel-ml

 

重啟機器,並選擇最新安裝的內核(第一個)

 

進入系統之后,查看內核版本uname -r

 

設置GRUB默認的內核版本

啟動系統時,系統默認選擇之前的版本,所以我們需要設置一下GRUB

重新創建內核配置

$ grub2-mkconfig -o /boot/grub2/grubenv

重啟

六、     重啟# 確認內核版本后,開啟IPVS  #功能開啟暫時未使用

#uname -a

 

#cat > /etc/sysconfig/modules/ipvs.modules <<EOF

#!/bin/bash

ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"

for kernel_module in \${ipvs_modules}; do

 /sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1

 if [ $? -eq 0 ]; then

 /sbin/modprobe \${kernel_module}

 fi

done

EOF

 

#chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

 

三、    安裝kubernetes組件

通過kubeadm安裝部署,鏡像倉庫采用阿里雲。安裝速度取決於網速

一、     安裝組件

#最新版1.14安裝測試問題較多,所以用了1.13.5

yum install -y kubelet-1.13.5 kubeadm-1.13.5 kubectl-1.13.5

二、     初始化master

#kubeadm init --kubernetes-version=1.13.5 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=swap --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers  --ignore-preflight-errors=SystemVerification

 

# --pod-network-cidr使用flannel網絡解決方案,默認10.244.0.0/16,如不指使用flannel時則會失敗

#--image-repository  使用阿里雲鏡像源,免去 科xue上網

#--ignore-preflight==SystemVerification   忽略內核版本

#--ignore-preflight-errors=swap    忽略swap設備警告,建議禁止swap設備

出現如下即成功

 

 

添加flannel插件:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

三、     執行腳本

 

  mkdir -p $HOME/.kube

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

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

四、     記錄令牌

l  添加Work節點

kubeadm join 172.18.14.90:6443 --token 17s13m.l22ssehvmm8ka1fy --discovery-token-ca-cert-hash sha256:90775d540aeb69e0e74405a3c3dd754afec0e58c020c312c07afc01b2813a4e7 --ignore-preflight-errors=swap --ignore-preflight-errors=SystemVerification

l  查看狀態

# kubectl get node

 

# kubectl get pod --all-name-spaces

 

四、    安裝dashboard

詳情可見:https://github.com/kubernetes/dashboard

個人參考:https://www.jianshu.com/p/c6d560d12d50            

 

一、     下載鏡像

#docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64

更名

#docker  tag registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64  k8s.gcr.io/kubernetes-dashboard-amd64

二、     部署

#master節點執行如下

# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

#開啟代理

# kubectl  proxy

如下所示已正常運行。

 

測試發現dashboard的證書過期,用瀏覽器無法訪問。

三、     制作證書

命令參考:alias ksys='kubectl -n kube-system'

 

 

1)    生成證書通過openssl生成自簽名證書

#cd  /root/keys

# openssl genrsa -out dashboard.key 2048

# openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=172.18.14.90‘

# openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt

# openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.cr

#openssl x509 -in dashboard.crt -text -nooutt

這樣就有了證書文件dashboard.crt 和 私鑰 dashboad.key

2)    下載yaml,並修改

#wget   https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

    #刪除Dashboard Secret字段中的內容

    #修改service 為nodeport類型,固定訪問端口

    修改前  

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

                修改后

kind: Service

apiVersion: v1

metadata:

  labels:

    k8s-app: kubernetes-dashboard

  name: kubernetes-dashboard

  namespace: kube-system

spec:

  type: NodePort

  ports:

    - port: 443

      nodePort:30003   #固定30003端口

      targetPort: 8443

  selector:

    k8s-app: kubernetes-dashboard

 

3)    生成secret

#ksys create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt

#ksys get secret | grep dashboard

#ksys describe secret kubernetes-dashboard-certs

如下圖所示

 

4)    重新apply yaml文件

#kubectl apply -f kubernetes-dashboard.yaml

查看服務狀態

 

5)               通過瀏覽器訪問:

https://masterip:30003

四、     設置DashBoard-身份驗證

登錄dashboard 的時候支持Kubeconfig 和token 兩種認證方式,Kubeconfig 中也依賴token 字段,所以生成token 這一步是必不可少的。

生成token

我們創建一個admin用戶並授予admin 角色綁定,使用下面的yaml文件創建admin用戶並賦予他管理員權限,然后就可以通過token 登陸dashbaord,這種認證方式本質實際上是通過Service Account 的身份認證加上Bearer token請求 API server 的方式實現,參考 Kubernetes 中的認證

1)   

kind: ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1beta1

metadata:

  name: admin

  annotations:

    rbac.authorization.kubernetes.io/autoupdate: "true"

roleRef:

  kind: ClusterRole

  name: cluster-admin

  apiGroup: rbac.authorization.k8s.io

subjects:

- kind: ServiceAccount

  name: admin

  namespace: kube-system

---

apiVersion: v1

kind: ServiceAccount

metadata:

  name: admin

  namespace: kube-system

  labels:

    kubernetes.io/cluster-service: "true"

    addonmanager.kubernetes.io/mode: Reconcile

.在node節點上創建:vim admin-sa.yaml

2)    執行如下

#kubectl create -f admin-sa.yaml

#查看是否成功

 

3)      獲取token

#kubectl get secret gitlab-admin -o jsonpath="{['data']['token']}" | base64 --decode

屏幕輸出相應token,輸入就可以登陸

 

 

 

五、    記錄坑

l  下載鏡像

可通過

docker   pull   registry.cn-hangzhou.aliyuncs.com/google_containers/鏡像名字:版本號

注意冒號,然后tag自己所需的鏡像名

l  master開放6443端口(建議禁用firewalld和iptables)

l  查看kubelet報錯詳細信息

               journalctl -xeu kubelet

l  kubelet增加啟動參數

建議禁用swap設備

 

l  設置docker 驅動

#more /etc/docker/daemon.json

{

  "exec-opts": ["native.cgroupdriver=systemd"]

}

#systemctl daemon-reload

# systemctl restart docker

#docekr  info   查看是否更改


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM