天天看点

Kubernetes集群部署Docker安装Kubernetes集群搭建

前提:基于Centos7系统,搭建一个单主节点的kubernetes集群

Docker安装

参照官方文档:https://docs.docker.com/install/linux/docker-ce/centos/

我们就选用docker-ce安装就行,按照官方的第一种方式进行安装:Install using the repository

1、卸载现有版本的docker:

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
           

2、安装前提:

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
           

3、设置docker官方的repo:

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
           

4、有了repo了,可以查看下可用的版本并排序:

$ yum list docker-ce --showduplicates | sort -r
           

5、选择合适的版本进行安装:

$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
           

6、启动Docker:

$ sudo systemctl start docker
           

7、测试:

$ sudo docker run hello-world
           

Kubernetes集群搭建

参照官方文档:https://v1-13.docs.kubernetes.io/docs/setup/independent/install-kubeadm/

最新的版本是1.15,笔者选择1.13,注意Kubernetes与Docker直接的版本兼容性(详见官方文档)

1、Kubernetes的每个节点都需要安装docker,也就是Kubernetes每个节点的一个运行环境/Run Time,确保docker为自启动:

systemctl enable docker
           

2、Kubernetes每个节点都需要进行Kubeadm、Kubelet、Kubectl的安装:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF

# Set SELinux in permissive mode (effectively disabling it)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

systemctl enable --now kubelet
           

systemctl status kubelet查看服务状态,应该是处于activating的状态,即等待启动,待主节点init之后,状态自然会变成activated

3、主节点初始化:

(1)初始化主节点

将/proc/sys/net/bridge/bridge-nf-call-iptables文件内容设置为1:

sysctl net.bridge.bridge-nf-call-iptables=1
           

初始化:这里pod-network使用的Weave Net,顾直接kubeadm init,不需要任何参数

kubeadm init
           

记录输出的kubeadm join --token... 一行内容,用于从节点加入该主节点时使用

这时通过 kubectl get pod -n kube-system 可以查看到主节点上创建的所有pod,这些pod为kubernetes集群中默认创建的一些pod(如果提示cannot connect localhost...,配置环境变量:KUBECONFIG=/etc/kubernetes/admin.conf)

(2)主节点配置CNI plugins:这里笔者采用Weave Net,亲身实践,比Flannel好用很多

使用现成的yaml文件创建weavenet的pod:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
           

再次通过kubectl get pod -n kube-system 查看集群默认创建的pod,确保所有pod都running,

通过kubectl get node 查看master节点是否处于Ready状态(可能会有一点延迟,稍等下应该就会Ready了)

4、从节点加入:

(1)当然首先要确保节点安装了docker、kubeadm、kubectl、kubelet并启动了docker、kubelet,并确保docker、kubelet自启动(kubelet一定是activating,当加入主节点后就activated了)

(2)将我们之前保存的那个kubeadm join --token命令拿出来:

kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
           

如果一切正常,返回主节点上,执行kubectl get node,应该就可以看到从节点了,很快从节点的也会成为Ready状态

(3)按同样的方法可以任意增加从节点

kubernetes单主节点集群搭建完毕!

5、问题点总结:

问题发现:在内网上搭建时,使用Weave Net的情况下,可能会发生的一个现象:weave-kube这个pod一直重启

找到对应的容器id,docker logs container_id,发现这样一句话:

Network 10.32.0.0/12 overlaps with existing route 10.0.0.0/8 on host.

大概意思就是说kubernetes使用weave net搭建的内部网络的网段与你的主机所在的网段冲突了

解决方式:

参照https://www.weave.works/docs/net/latest/kubernetes/kube-addon/#configuration-options

修改weavenet.yaml文件内容,配置网段,确保不与主机网段冲突(通过route -n 查看)

k8s

继续阅读