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 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 ~]# 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 下述组件: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"
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 AGEk8s-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*
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就部署成功了。
Kubernetes 的node节点,在本机上可以访问 web 的某个端口,但是从外网却无法访问。通常是由于selinux问题 和 iptables 问题。解决方式如下:# 查看 ...