kubeadm1.7 搭建 Kubernetes 集群实操

    使用kubernetes 搭建集群,因为网络等原因,对于那些初识k8s 的人,是一件很困难的事情,这里记录下整个集群搭建的过程和一些坑。

该文章后续仍在不断的更新修改中, 请移步到原文地址http://www.dmwan.cc/?p=150

    一、环境准备,操作系统:centos7.4 。第一个坑就是centos6.8安装阿里源的 kubernetes 会有依赖错误。

ip 地址hostname
192.168.0.11k8s-1
192.168.0.12k8s-2

    主机名处理,为了防止域名解析出错,这里先修改hostname:

# 写入 hostname(node 节点后缀改成 .node)
echo "k8s-1" > /etc/hostname 
# 加入 hosts
echo "192.168.0.11   k8s-1" >> /etc/hosts
echo "192.168.0.12   k8s-2" >> /etc/hosts
# 不重启情况下使内核生效
sysctl kernel.hostname=k8s-1

    然后,关闭防火墙和SE:

vi /etc/selinux/config
disabled
setenforce 0

systemctl disable firewalld
systemctl stop firewalld
systemctl disable iptables # 如果错误,yum install -y iptables
systemctl stop iptables

yum install -y ebtables
sysctl net.bridge.bridge-nf-call-iptables=1

    第二步,安装 kubernetes。

    这里最大的坑就是兼容性问题,注意最好用centos7。安装方式有两个,一个是自己编译,第二个可以使用阿里的源直接安装rpm 包。

    这里使用阿里源安装1.7:

#docker yum源
cat >> /etc/yum.repos.d/docker.repo <<EOF
[docker-repo]
name=Docker Repository
baseurl=http://mirrors.aliyun.com/docker-engine/yum/repo/main/centos/7
enabled=1
gpgcheck=0
EOF

#kubernetes yum源
cat >> /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

      安装docker 和 kubernetes,正常安装,这里应该不会报依赖错误。

yum install -y docker-engine-1.12.6-1.el7.centos.x86_64;
yum install -y kubernetes-cni-0.5.1-0.x86_64 kubelet-1.7.2-0.x86_64 kubectl-1.7.2-0.x86_64 kubeadm-1.7.2-0.x86_64

    第三步,拉取kubeadm 的依赖镜像。这个步骤本来可以省略的,但是国内网络环境原因,直接kubeadm init ,k8s 会自己去源站拉镜像,会hang 死,直接将对应版本 镜像先拉到本地,这样init 才能很快成功。

    这里我写了个shell 脚本,从我个人的docker hub 去拉取这些镜像,然后tag name :

images=(kube-proxy-amd64:v1.7.2 kube-discovery-amd64:1.0 kubedns-amd64:1.7 kube-scheduler-amd64:v1.7.2 kube-controller-manager-amd64:v1.7.2 kube-apiserver-amd64:v1.7.2 etcd-amd64:3.0.17 kube-dnsmasq-amd64:1.3 exechealthz-amd64:1.1 pause-amd64:3.0 kubernetes-dashboard-amd64:v1.6.1 k8s-dns-sidecar-amd64:1.14.4 )
for imageName in ${images[@]} ; do
  docker pull caucyming/$imageName
  docker tag caucyming/$imageName gcr.io/google_containers/$imageName
  docker rmi caucyming/$imageName
done

docker pull caucyming/weave-kube:2.3.0
docker tag caucyming/weave-kube:2.3.0 weaveworks/weave-kube:2.3.0
docker rmi caucyming/weave-kube:2.3.0

docker pull caucyming/weave-npc:2.3.0
docker tag caucyming/weave-npc:2.3.0 weaveworks/weave-npc:2.3.0
docker rmi caucyming/weave-npc:2.3.0

    这里为什么是这些镜像和这些镜像的版本,参看/etc/kubernetes/manifests 下的yaml 文件,kubeadm 就是不断 kubectl create 这些文件,要是版本不对,就去源站拉。

      因为网络问题,caucyming 是我个人的docker hub 账号,我通过在docker hub 上创建自动构建,由docker hub 去帮我从源站拉取,我直接从docker hub pull 镜像,就不会出现卡死的问题了,当然,也可以不这么做,直接全局代理,但是这样还是更快点。为了稳定,也可以使用自己的docker hub去自动构建,这个操作比较简单。

    weave 的版本,这里提一下,这里对应yaml 文件是wave-kube-1.6。这里下面会提到,版本不对,会导致dns 镜像起不来。

    第四步,初始化:

systemctl enable kubelet
systemctl start kubelet
kubeadm init --kubernetes-version=v1.7.2 # 这里还可以指定其他参数,可以参考help

    这里提一下,如果这里init 失败,或者机器重启,需要reset kubeadm,否则,识别到容器和/etc/kubernetes 等目录,会导致init 失败。

    重启的话,直接:

kubeadm reset

    到这一步,等1min 左右,如果正常,就会显示下面这条token了,这条token很重要,后期集群加机器要依赖这token:

kubeadm join --token=b17964.5d8a3c14e99cf6aa 192.168.0.11:6443

     如果运气不好,会永远卡死在这,这里的错,非常多,特别是上面有任何一个版本依赖不对,都会卡死。那如何查看问题出在哪里?可以通过journalctl 查看。有几个错我第一次安装的时候遇到过,cni初始化的问题,网上帖子一大堆,还有端口不对的问题,还有一堆 连接被拒绝的问题,保证版本对,防火墙关了,一般还是能正常通过的:

journalctl -xeu kubelet

    第五步,部署dns ,安装weave 网络

    网络方案很多,有weave 和 flanneld等,这里选择weave,这里注意wave-kube 的版本与前面的image 的版本要求是一致的。

kubectl apply -f https://git.io/weave-kube-1.6

    这里安装成功的话,执行下面命令,查看所有namespace 的pod 能发现 dns 的三个插件都能running。 

kubectl get pods -o wide --all-namespaces

    如果发现哪个pod 是异常的,可以describe 查看event 和log ,基本能debug 出问题在哪里。

NAMESPACE     NAME                                              READY     STATUS    RESTARTS   AGE       IP              NODE
kube-system   etcd-izwz9ap4sedl64wboiyh6cz                      1/1       Running   0          55m       172.18.214.46   izwz9ap4sedl64wboiyh6cz
kube-system   kube-apiserver-izwz9ap4sedl64wboiyh6cz            1/1       Running   0          54m       172.18.214.46   izwz9ap4sedl64wboiyh6cz
kube-system   kube-controller-manager-izwz9ap4sedl64wboiyh6cz   1/1       Running   0          55m       172.18.214.46   izwz9ap4sedl64wboiyh6cz
kube-system   kube-dns-3913472980-l8ghd                         3/3       Running   0          55m       10.32.0.2       izwz9ap4sedl64wboiyh6cz
kube-system   kube-proxy-n5332                                  1/1       Running   0          55m       172.18.214.46   izwz9ap4sedl64wboiyh6cz
kube-system   kube-scheduler-izwz9ap4sedl64wboiyh6cz            1/1       Running   0          54m       172.18.214.46   izwz9ap4sedl64wboiyh6cz
kube-system   weave-net-l86wx                                   2/2       Running   0          48m       172.18.214.46   izwz9ap4sedl64wboiyh6cz

    这里可以使用命令查pod 的异常信息,namespace 要指定,否则不能查看系统pod:

 kubectl --namespace kube-system logs kube-dns-3913472980-l8ghd

    第六步,k8s-2加入master:

    非master节点,安装k8s 和 proxy ,pause 的image,然后join。

kubeadm join --token=b17964.5d8a3c14e99cf6aa 192.168.0.11:6443

设置配置文件路径的环境变量:

export KUBECONFIG=/etc/kubernetes/kubelet.conf

稍后,查看Node的运行情况:

kubectl get nodes

NAME                      STATUS    AGE       VERSION
izwz9972b5w4h8a4f1h9z7z   Ready     2h        v1.6.4
izwz9ap4sedl64wboiyh6cz   Ready     4h        v1.6.4

    两个节点都ready ,表示安装成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值