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