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 查看)

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值