Kubernetes Centos 安装部署

一、前期准备

1、首先准备至少两台虚拟机,例如:

192.168.78.128 k8s-master

192.168.78.129 k8s-node

其中一台作为集群管理主机,一台为 node 主机。

2、设置主机的名称,方便部署时区别节点。

hostnamectl set-hostname k8s-master

hostnamectl set-hostname k8s-node1

3、master主机和node主机需要关闭的内容(必须执行的操作,在两台主机上执行如下命令即可)

systemctl stop firewalld  #关闭防火墙

setenforce 0  #关闭selinux

swapoff -a   #临时关闭swap

ntpdate ntp1.aliyun.com   #配置时间同步

4、在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

5、配置静态ip地址,主机一般都需要设置,防止 ip 动态变化

1、进入到/etc/sysconfig/network-scripts/ifcfg-你的网卡名字,可使用ipconfig查看网卡名称。

2、例如 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 查看)

6、centos7更换yum源

1、备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2、下载对应版本repo文件(以下是CentOS7版本), 放入/etc/yum.repos.d/

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

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

3、运行以下命令生成缓存

yum clean all

yum makecache

到此准备工作就已经完成了,接下来就可以部署 k8s。

二、部署K8s

Master主机部署的相关组件:

安装etcd:

1、部署etcd 用来持久化存储k8s的集群配置和状态,一般部署到master即可。

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

2、安装完成后在/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

 

3、启动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

1、在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 ~]# 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"

2、开机启动

[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安装

1、[root@k8s-master ~]# yum install docker docker-distribution -y   ##docker-distribution为docker的一个私有仓库,可以选择性安装

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

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

4、查看docekr版本 docker --version

5、配置阿里云镜像加速器

访问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

1、在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"

2、修改/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=""

3、启动并测试

[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

1、分别在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)

 2、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的部署就已经完成了,基本没啥坑要踩的了。

三、部署k8s dashboard验证集群部署是否可用

前期准备

1、首先要保证防火墙关闭,可使用

sudo iptables -F 清理防火墙

2、在docker的启动文件中加入如下内容

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

2、在【service】下面加入

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

3、执行yum install *rhsm*

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

5、执行 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

6、使用docker pull registry.access.redhat.com/rhel7/pod-infrastructure测试,如果正常即可。

部署dashboard

1、下载dashboard的yaml的配置文件,下载后可以放到一个目录下面,我这里是usr/local下面

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

2、修改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 

如果无需配置角色账号等信息,可直接将以上内容覆盖后修改即可。

1、执行kubectl create -f /usr/local/kubernetes-dashboard.yaml 进行部署

2、执行kubectl apply -f /usr/local/kubernetes-dashboard.yaml 进行角色关联

3、如果部署错误可使用删除后重新部署:kubectl delete -f /usr/local/kubernetes-dashboard.yaml

4、kubectl get pods --all-namespaces 查看节点是否部署成功

5、kubectl describe pod kubernetes-dashboard-692957223-4rwnr --namespace=kube-system  打印部署具体问题

6、查看dashboard被部署到了那台机器上 kubectl get pods --all-namespaces -o wide

7、查看集群内容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

 

Kubernetes 的node节点,在本机上可以访问 web 的某个端口,但是从外网却无法访问。通常是由于selinux问题 和 iptables 问题。解决方式如下:# 查看 ...