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 server,kubernetes Controller Manager ,Kubernetes 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 下述组件:kubelet、kubernets-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 AGEk8s-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*
五、执行 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就部署成功了。