centos7部署kubernetes詳細部署步驟

1、前期準備

一、首先準備至少兩臺虛擬機,能夠使用VMware Workstation Pro部署兩臺虛擬機。我這裏準備兩臺以下:node

192.168.78.128 k8s-masterpython

192.168.78.129 k8s-nodelinux

其中一臺做爲集羣管理主機,一臺爲node主機。docker

二、設置主機的名稱,方便部署時區別節點。json

hostnamectl set-hostname k8s-mastervim

hostnamectl set-hostname k8s-node1centos

三、master主機和node主機須要關閉的內容(必須執行的操做,在兩臺主機上執行以下命令便可)api

systemctl stop firewalld 關閉防火牆緩存

setenforce 0 關閉selinux服務器

ntpdate ntp1.aliyun.com 配置時間同步

swapoff -a 臨時關閉swap

四、在vim /etc/hosts下面配置

master的配置:

192.168.78.128 k8s-master

192.168.78.128 etcd

192.168.78.128 registry

192.168.78.129 k8s-node1

node配置:

192.168.78.128 k8s-master

192.168.78.128 etcd

192.168.78.129 registry

192.168.78.129 k8s-node1

五、配置靜態ip地址,主機通常都須要設置,防止ip動態變化

一、進入到/etc/sysconfig/network-scripts/ifcfg-你的網卡名字   可以使用ipconfig查看網卡名稱

 

二、例如 vim /etc/sysconfig/network-scripts/ifcfg-ens33 編譯後加入以下內容

master配置:

BOOTPROTO="static" # 使用靜態IP地址,默認是dhcp

IPADDR="192.168.78.128" # 設置的靜態IP地址

NETMASK="255.255.255.0" # 子網掩碼

GATEWAY="192.168.78.2" # 網關地址(使用route -n 第一行就是默認的網關)

DNS1="8.8.8.8" # DNS服務器 (cat /etc/resolv.conf 查看)

node配置:

BOOTPROTO="static" # 使用靜態IP地址,默認是dhcp

IPADDR="192.168.78.129" # 設置的靜態IP地址

NETMASK="255.255.255.0" # 子網掩碼

GATEWAY="192.168.78.2" # 網關地址(使用route -n 第一行就是默認的網關)

DNS1="8.8.8.8" # DNS服務器 (cat /etc/resolv.conf 查看)

六、centos7更換yum源

一、備份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

二、下載對應版本repo文件(如下是CentOS7版本), 放入/etc/yum.repos.d/

進入 cd /etc/yum.repos.d/

執行 wget https://mirrors.163.com/.help/CentOS7-Base-163.repo

三、運行如下命令生成緩存

yum clean all

yum makecache

到此準備工做就已經完成了,接下來就能夠部署了。

2、部署K8s

Master主機部署的相關組件:

安裝etcd:

一、部署etcd 用來持久化存儲k8s的集羣配置和狀態,通常部署到master便可。

[root@k8s-master /]# yum install -y etcd

二、安裝完成後在/etc/etcd/etcd.conf中配置內容以下:

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

ETCD_NAME="master"

ETCD_ADVERTISE_CLIENT_URLS="http://etcd:2379"  ##此處的etcd爲上面配置的hosts中的映射。實際ip爲192.168.78.128

三、啓動etcd並驗證時候部署成功

[root@k8s-master ~]# systemctl start etcd

[root@k8s-master ~]# etcdctl -C http://etcd:2379 cluster-health

看到以下內容則表示正常

member 8e9e05c52164694d is healthy: got healthy result from http://etcd:2379 cluster is healthy

安裝kubernetes 安裝完成便可包含相關組件

[root@k8s-master ~]# yum install -y kubernetes

一、在master主機上部署的組件有 kubernetes API serverkubernetes Controller ManagerKubernetes Scheduler

姑且須有修改如下的配置

修改/etc/kubernetes/apiserver的配置內容以下:

[root@k8s-master ~]# vim /etc/kubernetes/apiserver

KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"

KUBE_ETCD_SERVERS="--etcd-servers=http://etcd:2379"

KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

KUBE_API_ARGS=""

修改/etc/kubernetes/config 內容以下:

[root@k8s-master ~]# grep -v "^#" /etc/kubernetes/config

KUBE_LOGTOSTDERR="--logtostderr=true"

KUBE_LOG_LEVEL="--v=0"

KUBE_ALLOW_PRIV="--allow-privileged=false"

KUBE_MASTER="--master=http://k8s-master:8080"

二、開機啓動

[root@k8s-master ~]# systemctl enable kube-apiserver kube-controller-manager kube-scheduler

[root@k8s-master ~]# systemctl start kube-apiserver kube-controller-manager kube-scheduler

到此master的安裝部署就已經完成了,接下來須要部署node主機組件,master主機無需安裝docker環境,故此沒有部署。

node主機相關組件部署:

docker安裝

一、[root@k8s-master ~]# yum install docker docker-distribution -y   ##docker-distribution爲docker的一個私有倉庫,能夠選擇性安裝

二、[root@k8s-master ~]# systemctl start docker docker-distribution

三、[root@k8s-master ~]# systemctl enable docker docker-distribution

四、查看docekr版本 docker --version

五、配置阿里雲鏡像加速器

訪問https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 自行登陸後查看本身的鏡像加速地址

[root@k8s-master /]# vim /etc/docker/daemon.json

{ "insecure-registries":["192.168.78.130:5000"], "registry-mirrors":["https://4ojlwa2w.mirror.aliyuncs.com"] }

將內容粘貼進去便可。 insecure-registries 表示信任非https的訪問地址 有私有倉庫時配置,沒有則可不配置

kubernetes安裝

yum install kubernetes

一、在node節點上須要啓動kubernetes 下述組件:kubeletkubernets-Proxy,所以須要相應修改下述配置。

[root@k8s-node-1 ~]# vim /etc/kubernetes/config

KUBE_LOGTOSTDERR="--logtostderr=true"

KUBE_LOG_LEVEL="--v=0"

KUBE_ALLOW_PRIV="--allow-privileged=false"

KUBE_MASTER="--master=http://k8s-master:8080"

二、修改/etc/kubernetes/kubelet

[root@k8s-node-1 ~]# vim /etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=0.0.0.0"

KUBELET_HOSTNAME="--hostname-override=k8s-node1" #注意配置爲對應node的hostname

KUBELET_API_SERVER="--api-servers=http://k8s-master:8080"

KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

KUBELET_ARGS=""

三、啓動並測試

[root@k8s-node-1 ~]# systemctl enable kubelet kube-proxy

[root@k8s-node-1 ~]# systemctl start kubelet kube-proxy

啓動後在master主機上執行如下命令查看是否成功

[root@k8s-master kubernetes]# kubectl get node

出現以下內容則表示成功
NAME STATUS AGE

k8s-node1 Ready 36s

Flannel覆蓋網絡安裝(master和node都要安裝)

[root@k8s-master ~]# yum install -y flannel

已安裝:

      flannel.x86_64 0:0.7.1-4.el7

一、分別在master和node 主機上配置/etc/sysconfig/flanneld配置文件,以下:

[root@k8s-master /]# vim /etc/sysconfig/flanneld

FLANNEL_ETCD_ENDPOINTS="http://etcd:2379"

FLANNEL_ETCD_PREFIX="/kube/network"

配置etcd中關於flannel的key(‘/atomic.io/network/config’這個key與上文/etc/sysconfig/flanneld中的配置項FLANNEL_ETCD_PREFIX是相對應的,錯誤的話啓動就會出錯,這裏目前改成/kube/network)

 二、Flannel 網絡的IP網段

[root@k8s-master /]# etcdctl mk /kube/network/config '{"Network": "10.88.0.0/16"}'

打印出如下內容則表示成功 {"Network": "10.88.0.0/16"}

 

 

 

 

部署完成依次從新啓動docker和kubernetes

 #在master 執行

systemctl enable docker

systemctl enable etcd kube-apiserver kube-scheduler kube-controller-manager

systemctl restart etcd kube-apiserver kube-scheduler kube-controller-manager

systemctl restart flanneld docker

#在node上執行

systemctl restart kubelet kube-proxy

systemctl restart flanneld docker

#網絡相關後啓動 flanneld 和 docker 重置網絡

systemctl enable flanneld kubelet kube-proxy docker

到此順利的話k8s的部署就已經完成了,基本沒啥坑要踩的了。

3、部署k8s dashboard驗證集羣部署是否可用

前期準備

一、首先要保證防火牆關閉,可以使用

sudo iptables -F 清理防火牆

二、在docker的啓動文件中加入以下內容

一、vim /usr/lib/systemd/system/docker.service

二、在【service】下面加入

ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT

三、執行yum install *rhsm*

四、執行 wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm

五、執行 rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem

六、使用docker pull registry.access.redhat.com/rhel7/pod-infrastructure測試,若是正常便可。

部署dashboard

一、下載dashboard的yaml的配置文件,下載後能夠放到一個目錄下面,我這裏是usr/local下面

[root@k8s-master local]# wget http://mirror.faasx.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

二、修改ymal配置文件

kind: Deployment 
apiVersion: extensions/v1beta1 
metadata: 
  labels: 
    app: kubernetes-dashboard 
  name: kubernetes-dashboard 
  namespace: kube-system 
spec: 
  replicas: 1 
  selector: 
    matchLabels: 
      app: kubernetes-dashboard 
  template: 
    metadata: 
      labels: 
        app: kubernetes-dashboard 
      # Comment the following annotation if Dashboard must not be deployed on master 
      annotations: 
        scheduler.alpha.kubernetes.io/tolerations: | 
          [ 
            { 
              "key": "dedicated", 
              "operator": "Equal", 
              "value": "master", 
              "effect": "NoSchedule" 
            } 
          ] 
    spec: 
      containers: 
      - name: kubernetes-dashboard 
        image: registry.cn-hangzhou.aliyuncs.com/kubeapps/k8s-gcr-kubernetes-dashboard-amd64:v1.8.3      #默認的鏡像是使用google的,這裏改成阿里的
        #imagePullPolicy: Always 
        ports: 
        - containerPort: 9090 
          protocol: TCP 
        args: 
          # 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://192.168.78.128:8080    #注意這裏是api的地址 
        livenessProbe: 
          httpGet: 
            path: / 
            port: 9090 
          initialDelaySeconds: 30 
          timeoutSeconds: 30 
--- 
kind: Service 
apiVersion: v1 
metadata: 
  labels: 
    app: kubernetes-dashboard 
  name: kubernetes-dashboard 
  namespace: kube-system 
spec: 
  type: NodePort ##暴露端口新加的配置
  ports: 
  - port: 80 
    targetPort: 9090 
  selector: 
    app: kubernetes-dashboard

若是無需配置角色帳號等信息,可直接將以上內容覆蓋後修改便可。

一、執行kubectl create -f /usr/local/kubernetes-dashboard.yaml 進行部署

二、執行kubectl apply -f /usr/local/kubernetes-dashboard.yaml 進行角色關聯

三、若是部署錯誤可以使用刪除後從新部署:kubectl delete -f /usr/local/kubernetes-dashboard.yaml

四、kubectl get pods --all-namespaces 查看節點是否部署成功

五、kubectl describe pod kubernetes-dashboard-692957223-4rwnr --namespace=kube-system  打印部署具體問題

六、查看dashboard被部署到了那臺機器上 kubectl get pods --all-namespaces -o wide

七、查看集羣內容ip:kubectl get services --all-namespaces

到此dashboard就部署成功了。

 

訪問:http://192.168.78.128:8080/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard/#!/node?namespace=default

相關文章
相關標籤/搜索