2、docker已配置完成、已设置镜像加速(阿里云)。
3、配置主机名通信
1、使用nmtui设置hostname:(master.docker/node1.docker/...)
2、vi /etc/hosts
3、ping node1.docker 测试连通。
一、配置kubernetes和docker的yum.repo
(阿里云的镜像库:https://opsx.alibaba.com/)
Kubernetes repo路径: https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
Kubernetes yum key路径:
https://mirrors.aliyun.com/kubernetes/yum/doc/
1. Kubernetes.repo配置文件内容(自行输入):
一个密钥后面会认证不通过:
两个密钥:
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
2. 更新repo列表:
yum repolist
3. 将kubernates.repo和docker-ce.repo给每个节点复制一份。(docker-ce已有就不复制)
scp kubernetes.repo node2.docker:/etc/yum.repos.d/
4. 安装k8s及相关工具:yum install kubelet kubeadm kubectl
如果安装过程中检查gpgkey失败:
1. 将kubernetes.repo里的gpgcheck=0
2. 下载yum-key.gpg和rpm-package-key.gpg并导入rpm --import yum-key.gpg rpm --import rpm-package-key.gpg
3. yum install kubelet kubeadm kubectl
4. 启动docker和kubelet
#启动命令如下:
systemctl enable docker
systemctl start docker
systemctl enable kubelet
systemctl start kubelet
5. kubeadm init
(kubeadm运行的主机需要至少2个逻辑处理器)
初始化master节点
使用kubeadm配置master节点的时候,运行kubeadm init需要一些镜像文件但是国内的网络访问不了k8s.gcr.io所以需要一些手段去下载所需的镜像文件。会存在拉取镜像的问题,其主要原因在于相关组件的镜像都在外网上,想要拉取这些镜像,主要有两种办法。
1. 在docker Unit File中的Environment中定义代理上网,这样docker在实际拉取镜像的时候,就能够通过代理去拉取镜像。
2. 在本地下载好相关的镜像,然后将镜像打包传到服务器上。
3. 拉取镜像1/2方法在很多情况下不好用,但是我们有个稳妥地解决方案:
.察看k8s依赖的镜像
kubeadm config images list
.从其他镜像库(谷歌)拉取指定镜像(注意版本要一致)
docker pull mirrorgooglecontainers/$imageName
.将镜像的tag改为k8s.gcr.io/$images:version并清理此前的tag
docker tag mirrorgooglecontainers/$imageName k8s.gcr.io/$imageName
docker rmi mirrorgooglecontainers/$imageName
====================================================
快速pull并tag、rmi:k8s-1.13.1镜像:
新建 runpulls.sh脚本文件
bash ./runpulls.sh 运行
{}里面是脚本内容
{
#!/bin/bash
images=(kube-proxy-amd64:v1.13.1 kube-scheduler-amd64:v1.13.1 kube-controller-manager-amd64:v1.13.1 kube-apiserver-amd64:v1.13.1
etcd-amd64:3.2.24 pause-amd64:3.1 kubernetes-dashboard-amd64:v1.8.3 k8s-dns-sidecar-amd64:1.14.8 k8s-dns-kube-dns-amd64:1.14.8
k8s-dns-dnsmasq-nanny-amd64:1.14.8)
for imageName in ${images[@]} ; do
docker pull mirrorgooglecontainers/$imageName
docker tag mirrorgooglecontainers/$imageName k8s.gcr.io/$imageName
docker rmi mirrorgooglecontainers/$imageName
done
docker pull coredns/coredns:1.2.6
docker tag k8s.gcr.io/kube-proxy-amd64:v1.13.1 k8s.gcr.io/kube-proxy:v1.13.1
docker tag k8s.gcr.io/kube-apiserver-amd64:v1.13.1 k8s.gcr.io/kube-apiserver:v1.13.1
docker tag k8s.gcr.io/kube-controller-manager-amd64:v1.13.1 k8s.gcr.io/kube-controller-manager:v1.13.1
docker tag k8s.gcr.io/kube-scheduler-amd64:v1.13.1 k8s.gcr.io/kube-scheduler:v1.13.1
docker tag coredns/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6
docker tag k8s.gcr.io/etcd-amd64:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag k8s.gcr.io/pause-amd64:3.1 k8s.gcr.io/pause:3.1
docker rmi k8s.gcr.io/kube-proxy-amd64:v1.13.1
docker rmi k8s.gcr.io/kube-apiserver-amd64:v1.13.1
docker rmi k8s.gcr.io/kube-controller-manager-amd64:v1.13.1
docker rmi k8s.gcr.io/kube-scheduler-amd64:v1.13.1
docker rmi coredns/coredns:1.2.6
docker rmi k8s.gcr.io/etcd-amd64:3.2.24
docker rmi k8s.gcr.io/pause-amd64:3.1
docker images
}
====================================================
所有依赖镜像准备好之后就可以下一步了。
1. 修改/etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
2. kubeadm init --kubernetes-version=v1.13.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.84.131 --ignore-preflight-errors=Swap
(参数配置说明)
关闭系统Swap
Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。可以通过kubelet的启动参数--fail-swap-on=false更改这个限制。
#修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf,加入:
Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
#使配置修改生效:
systemctl daemon-reload
使用kubeadm init初始化集群
#使用kubeadm初始化集群,在Master Node上执行下面的命令:
kubeadm init \
--kubernetes-version=v1.10.0 \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=10.0.0.39 (master这台主机的IP)
#说明
我们选择flannel作为Pod网络插件,所以上面的命令指定–pod-network-cidr=10.244.0.0/16
#执行时的WARNING
#执行时如有:
[preflight] Some fatal errors occurred:
[ERROR Swap]: running with swap on is not supported. Please disable swap
请添加–ignore-preflight-errors=Swap参数忽略这个错误,重新运行。
#可能遇到的问题:
1. [preflight] Some fatal errors occurred:
/proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
解决方案:
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
k8s集群master节点搭建OK。
这一段是搭建成功后的输出:
Your Kubernetes master has initialized successfully!
{
To start using your cluster, you need to run the following as a regular user:
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.84.131:6443 --token g3by1f.s6z8dj0jnaozjvcc --discovery-token-ca-cert-hash sha256:19aeef43717603985b7f00b79735a7b2d227c474f53b553b85330a7b65d5e784
}
高兴一下。。。继续干活
这三条命令需要依次执行一下
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
此时可以看下组件状态信息:
kubectl get cs
查看节点信息:
kubectl get nodes
部署flannel:
flannel可以添加到任何现有的Kubernetes集群,尽管在开始使用pod网络还没有任何pod添加进集群之前是最简单的。
对于Kubernetes v1.7以上版本:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl get pods -n kube-system
此时k8s会下载flannel镜像(quay.io/coreos/flannel ),网络原因可能会有些慢。docker images 查看下载进度。
镜像部署之后查看kube-system命名空间的pod状态(重点看下flannel)
kubectl get pods -n kube-system
kubectl get ns 查看所有命名空间
get cs 和get pods 观察各组件都没问题master节点就算搭建OK了.
(如果master主机重启不用再设置或者kubeadm init,前提是设置了docker和kebelet开机自启)
==========================================================================
节点加入集群:
1. 传递配置文件到节点主机
scp /usr/lib/systemd/system/docker.service node1:/usr/lib/systemd/system/docker.service
scp /etc/sysconfig/kubelet node1:/etc/sysconfig/
2. 安装docker、kubelet、kubeadm并启动(设置开机自启).
3. join集群:
kubeadm join 192.168.84.131:6443 --token g3by1f.s6z8dj0jnaozjvcc --discovery-token-ca-cert-hash sha256:19aeef43717603985b7f00b79735a7b2d227c474f53b553b85330a7b65d5e784 --ignore-preflight-errors=Swap
看到这句话你就明白OK了。
4. 等待node节点所需的镜像下载结束。
(如果join过程中配置有错就要把主机重启一下再配置、启动)
此步需要运行下runpulls.sh脚本以下载依赖镜像;
回到master运行 kubectl get nodes查看集群各节点状态;
kubectl get pods -n=kube-system -o wide
查看pod记录log
kubectl logs kubernetes-dashboard-5998f454bd-lssd9 -n kube-system
kubectl describe pods/kubernetes-dashboard-6948bdb78-w9452 --namespace=kube-system
安装dashboard
下载https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
编辑 kubernetes-dashboard.yaml
# ------------------- Dashboard Deployment ------------------- #
image: mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1
- --apiserver-host=http://192.168.84.131:9090
kubectl create -f kubernetes-dashboard.yaml
kubectl delete -f kubernetes-dashboard.yaml