安装K8S集群node
三节点 k8smaster 192.168.6.128 centos7 做为k8s的master节点linux
k8snode1 192.168.6.129 centos7 做为k8s的node节点git
k8snode2 192.168.6.130 centos7 做为k8s的node节点github
三节点均新建用户nicole 主目录为/users/nicoledocker
三节点均能访问互联网shell
配置全部节点的/etc/hosts,使全部节点能够经过机器名ping通json
配置全部节点的时间同步centos
配置全部节点的firewalld不启动,方法以下:分别在三个节点上以root用户执行如下三条命令:api
systemctl stop firewalld (中止运行中的防火墙)服务器
systemctl disable firewalld ( 设置防火墙开机禁用)
systemctl status firewalld (查看防火墙当前的状态,确认其已经关闭)
一、配置yum安装kubelet、kubeadm、docker、kubectl的yum镜像源
kubelet、kubeadm、kubectl的仓库地址:
https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
kubelet、kubeadm、kubectl的两个gpg校验密钥文件地址
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
超户下执行
cd /etc/yum.repos.d/
vi kubernetes.repo 内容:
[kubernetes]
name=Kubernetes Repo
baseurl= https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1
cd ~/ 切换到超户的home目录
wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
rpm --import rpm-package-key.gpg 导入密钥
rpm –import yum-key.gpg 导入密钥
yum repolist 确认刚刚配置的两个仓库是否能正常工做
docker的yum安装文件地址
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
cd /etc/yum.repos.d/ 切换路径
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
下载docker的yum源文件
二、安装kubeadm、kubelet、kubectl、docker
超户下执行
yum install docker-ce kubeadm kubelet kubectl
三、配置docker开机自启动
systemctl start docker 启动docker
systemctl status docker 查看docker状态
systemctl enable docker 配置docker开机自启动
四、配置docker中的代理服务器(若是有代理服务器能够翻出去,就应该配置)
vi /usr/lib/systemd/system/docker.service
在ExecStart=/usr/bin/dockerd 这一行上面添加:
Environment=”HTTPS_PROXY=http://www.ik8s.io:10080” 若是没有代理,则本行注释掉
Environment=”NO_PROXY=127.0.0.0/8,192.168.6.0/24”
从新加载配置
systemctl daemon-reload
重启docker服务
sysemctl docker
确认配置生效
docker info
五、配置docker国内镜像仓库( 我选用的是阿里云)
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://********.mirror.aliyuncs.com"]
}
其中*****因我的的帐户不一样而不一样
从新加载配置
systemctl daemon-reload
重启docker服务
sysemctl docker
确认配置生效
docker info
查看kubelet的依赖
rpm –ql kubelet
vi /etc/sysconfig/kubelet ,设置
KUBELET_EXTRA_ARGS=”—fail-swap-on=false”
即当swap监测fail的时候,不作处理
systemctl start kubelet 启动kubelet
(此处只是测试一下,因初始化配置没有完成,必定会启动失败)
systemctl status kubelet 检查kubelet运行状态
tail /var/log/message 查看出错日志
systemctl stop kubelet 中止kubelet
systemctl enable kubelet 虽然kubelet启动会失败,但要设置开机自启动
先使用kubeadm init –help 了解一下kubeadm init的使用方法
使用kubeadm init 初始化kubernetes
kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 –server-cidr=10.96.0.0/12 –apiserver-advertise-address=192.168.6.128 –ignore-preflight-errors=Swap
执行完这个命令以后,通常都会报错。缘由在于:该命令将致使docker去谷歌官网的镜像仓库pull数个必须的镜像到本地,但对于中国大陆用户来讲,这个网站是不可达的,若是前面的代理服务网站被正确设置,而且代理可用的话,是能够经过代理将镜像拉取到本地的。但通常而言,很难找到合适的代理服务。所以,须要手动经过镜像仓库将镜像拉取到本地
执行 kubeadm config images list ,能够获得须要拉取的镜像名称和版本号。可能以下所示:
k8s.gcr.io/kube-apiserver:v1.13.3
k8s.gcr.io/kube-controller-manager:v1.13.3
k8s.gcr.io/kube-scheduler:v1.13.3
k8s.gcr.io/kube-proxy:v1.13.3
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/coredns:1.2.6
将k8s.gcr.io改为mirrorgooglecontainers,键入以下命令逐一拉取镜像:
docker pull mirrorgooglecontainers/kube-apiserver:v1.13.3
docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.3
docker pull mirrorgooglecontainers/k8s.gcr.io/kube-scheduler:v1.13.3
docker pull mirrorgooglecontainers/kube-proxy:v1.13.3
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.2.24
这些命令本质上是从google的镜像仓库中将对应的镜像拉取到本地,但拉取到本地后,镜像的tag和须要的tag是不同的,所以还须要将tag逐一改为k8s.gcr.io,命令以下:
docker tag mirrorgooglecontainers/kube-apiserver:v1.13.3 k8s.gcr.io/kube-apiserver:v1.13.3
docker tag mirrorgooglecontainers/ kube-controller-manager:v1.13.3 k8s.gcr.io/kube-controller-manager:v1.13.3
docker tag mirrorgooglecontainers/k8s.gcr.io/kube-scheduler:v1.13.3 k8s.gcr.io/kube-scheduler:v1.13.3
docker tag mirrorgooglecontainers/kube-proxy:v1.13.3 k8s.gcr.io/kube-proxy:v1.13.3
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
最后一个镜像须要到其自身官网上拉取
docker pull coredns/coredns:1.2.6
docker tag coredns/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6
docker rmi coredns/coredns:1.2.6
能够将上述命令写成shell脚本,一次性执行完成;
当完成了拉取以后,再次执行
kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 –server-cidr=10.96.0.0/12 –apiserver-advertise-address=192.168.6.128 –ignore-preflight-errors=Swap
命令执行完成以后就会提示成功地完成了master的初始化
master节点上安装Pod网络须要使用kubectl命令,kubectl命令在安装完成以后须要一些配置才能使用。
首先要明白,kubectl命令只能在普通用户下使用,超户下没法使用。
所以须要切换到普通用户下,这里切换到nicole用户下
su – nicole
mkdir –p $HOME/.kube
sudo cp –i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown nicole:nicole $HOME/.kube/config
注意:使用上述命令须要nicole用户有sudo的权限
kubectl apply –f https://raw.githubusercontent.com/coreos/flannel/master/documentation/kube-flannel.yml
很不幸,此次的命名执行完成以后,也不会成功地安装flannel网络,缘由也是镜像没法拉取到本地。
首先查看节点运行状态:kubectl get nodes ,能够发现master节点的status不是READY状态;
接下来查看pod运行状态:kubectl get pod --all-namespaces,能够看到集群中有许多的pod的状态不是RUNNING状态,而是Pending、ContainerCreating、ImagePullBackOff之类的没有就绪的状态,但经过这个命令咱们能够查看到那些未就绪的pod的名字;
接下来查看某一特定pod的具体状况:kubectl describe pod <pod name> --namespace=kube-system,能够看到某一特定pod的运行状态,命令的输出中就能够看到是某一特定的镜像拉取失败,从这里就能够看到镜像名了,例如镜像名为quay.io/coreos/flannel:v0.11.0-amd64的镜像拉取失败
将quay.io/coreos/flannel:v0.11.0-amd64改成quay-mirror.qiniu.com /coreos/flannel:v0.11.0-amd64,使用命令:
docker pull quay-mirror.qiniu.com /coreos/flannel:v0.11.0-amd64 便可以拉取镜像
拉取完成以后,将quay-mirror.qiniu.com /coreos/flannel:v0.11.0-amd64改成quay.io/coreos/flannel:v0.11.0-amd64,使用命令:
docker tag docker pull quay-mirror.qiniu.com /coreos/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
按照三、4的方式,逐一将因拉取镜像失败而状态异常的pod的依赖镜像拉取到本地,以后从新执行
kubectl apply –f https://raw.githubusercontent.com/coreos/flannel/master/documentation/kube-flannel.yml
此时,全部的pod将运行正常
另:将quay.io/coreos/flannel:v0.11.0-amd64也可改成registry.aliyuncs.com /coreos/flannel:v0.11.0-amd64
在root用户下将master节点上的kubernetes.repo、docker-ce.repo文件复制到各node节点的/etc/yum.repos.d/目录中
在root用户下将master节点上的rpm-package-key.gpg、yum-key.gpg文件复制到各node节点的root主目录中
rpm --import rpm-package-key.gpg 导入密钥
rpm –import yum-key.gpg 导入密钥
执行yum安装
yum install docker-ce kubeadm kubelet kubectl(kubectl能够不装)
在node一、node2上执行kubeadm join命令将,将两个节点注册到cluster中。命令以下:
kubeadm join --token ********* 192.168.6.128:6443
其中*****来自前面master节点作kubeadm init时命令输出的提示,若是没有记录下来,能够经过kubeadm token list查看
在master节点上运行kubectl get nodes查看节点的状态,全部的节点状态应该都是READY。
若是不是READY,就要继续查看pod的状态,再根据未就绪的pod的名字查看对应的pod的具体运行信息,一般是依赖的镜像没有下载,此时仍然须要根据前面的方式手动下在对应的镜像。