VirtualBox上使用kubeadm安装Kubernetes集群

  之前一直使用minikube练习,为了更贴近生产环境,使用VirtualBox搭建Kubernetes集群。
  
  为了不是文章凌乱,把在搭建过程中遇到的问题及解决方法记在了另一篇文章:安装Kubernetes集群时遇到的问题及解决方法
  
  1.软件版本
  
  VirtualBox:6.1
  
  CentOS:7
  
  Docker:19.03.6
  
  Kubernetes:1.17
  
  2.新建虚拟机
  
  主要是设置内存和硬盘,内存2G,硬盘20G基本够用
  
  3.虚拟机配置
  
  虚拟机新建完成后,将CPU配置成2个。将网卡模式设置为桥接,这样虚拟机可以访问外网,与宿主机也可以互相通信,方便以后ssh。
  
  4.安装CentOS
  
  如下图设置好CentOs镜像后,在VirtualBox界面点“启动”,进入安装界面点“Install CentOS 7”。
  
  进入安装界面
  
  设置时区。
  
  选择安装磁盘。
  
  安装模式选“Minimal Install”,附加软件全选
  
  "NETWORK & HOST NAME"中打开OnBoot,主机名如果不在这里设置,在安装完系统后可以通过“hostnamectl”命令设置。
  
  安装过程中可以设置root用户密码或者添加新用户。
  
  设置好后,安装、等待、重启,就能进入CentOS了。
  
  5.安装Docker
  
  直接在虚拟机界面上操作比较费事,使用ssh免密登录。
  
  //没有 ~/.ssh/id_rsa.pub 文件的,使用ssh-keygen一直回车生成即可。
  
  ssh-copy-id -i ~/.ssh/id_rsa.pub root@kube0.vm
  
  Docker安装步骤如下:
  
  //添加yum源
  
  yum-config-manager --add-repo http://www.xinchenkg.com mirrors.aliyun.com/repo/Centos-7.repo
  
  //安装
  
  wget -qO- https://get.docker.com | sh
  
  6.安装Kubernetes
  
  6.1 禁用SELinux
  
  临时关闭:命令行执行 setenforce 0
  
  永久关闭:修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled
  
  6.2 关闭防火墙
  
  systemctl disable firewalld && systemctl stop firewalld
  
  6.3 关闭交换分区
  
  swapoff -a && sed -i www.jinniugpt.cn'/ swap / s/^/#/' /etc/fstab
  
  6.4 更改iptables的设置
  
  echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
  
  6.5 添加国内yum源
  
  cat > /etc/yum.repos.d/kubernetes.repo << EOF
  
  [kubernetes]
  
  name=Kubernetes
  
  baseurl=https://www.sangyulpt.com mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  
  enabled=1
  
  gpgcheck=0
  
  repo_gpgcheck=0
  
  gpgkey=https://www.yixingylzc.cn mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  
  EOF
  
  6.6 添加docker镜像
  
  在 /etc/docker/daemon.json 中加入一行
  
  "registry-mirrors": www.wangffzc.cn["https://registry.docker-cn.co"]
  
  6.7 安装kubectl、kubeadm、kubelet
  
  yum -y install kubectl kubeadm kubelet
  
  6.8 启动docker、kubelet
  
  systemctl enable docker && systemctl start docker
  
  systemctl enable kubelet && systemctl start kubelet
  
  6.9 clone虚拟机
  
  clone两个虚拟机,并命名为kube1.vm、kube2.vm
  
  hostnamectl set-hostname kube1.vm
  
  将三台虚拟机的host写入到宿主机和每一台虚拟机
  
  vi /etc/hosts
  
  # 追加以下内容(ip自行替换)
  
  192.168.1.98 kube0.vm
  
  192.168.1.99 kube1.vm
  
  192.168.1.100 kube2.vm
  
  6.10 初始化master、添加node
  
  在kube0.vm上执行 kubeadm init
  
  安装成功后在kube0.vm执行以下命令,以便于使用kubectl
  
  mkdir -p $HOME/.kube
  
  sudo cp -www.yasenyulee.cn /etc/kubernetes/admin.conf $HOME/.kube/config
  
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
  
  在kube1.vm、kube2.vm中执行以下命令加入集群(具体参数自行替换)。
  
  kubeadm join 192.168.1.98:6443 --token 0m5rnp.6vizjaiowvk4fpkk \
  
  --discovery-token-ca-cert-hash sha256:8d74f62b11584360d3ab42f7747071c91d103f322e5a52c8a592b77fc2aadb04
  
  此时查看node的状态可以看到都是NotReady
  
  -> [root@kube0.vm] [~] kubectl get node
  
  NAME       STATUS     ROLES    AGE   VERSION
  
  kube0.vm   NotReady   master   21h   v1.17.3
  
  kube1.vm   NotReady   <none>   21h   v1.17.3
  
  kube2.vm   NotReady   <none>   21h   v1.17.3
  
  执行:kubectl describe node/kube0.vm ,发现是未配置容器网络。
  
  runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
  
  6.11 配置容器网络(flannel)
  
  kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  
  安装完成后,等了一会还是NotReday,查看pod状态
  
  kubectl describe 查看原因:
  
  kubectl describe -n kube-system pod/kube-flannel-ds-amd64-6kbdj
  
  众所周知的原因,使用镜像拉取,然后docker tag 设置别名。
  
  具体操作可以查看Kubernetes搭建过程中使用k8s.gcr.io、quay.io、docker.io的镜像加速
  
  查看pod状态依然有问题:
  
  -> [root@kube0.vm] [~] kubectl get pod -A|grep flannel
  
  kube-system   kube-flannel-ds-amd64-6kbdj        0/1     CrashLoopBackOff    5          11m
  
  kube-system   kube-flannel-ds-amd64-k29d4        0/1     Error               5          11m
  
  kube-system   kube-flannel-ds-amd64-kftn9        0/1     CrashLoopBackOff    6          11m
  
  查看logs:
  
  -> [root@kube0.vm] [~] kubectl logs -n kube-system pod/kube-flannel-ds-amd64-6kbdj
  
  I0301 10:13:47.129650       1 main.go:514] Determining IP address of default interface
  
  I0301 10:13:47.211916       1 main.go:527] Using interface with name enp0s3 and address 192.168.1.98
  
  I0301 10:13:47.212141       1 main.go:544] Defaulting external address to interface address (192.168.1.98)
  
  I0301 10:13:47.224287       1 kube.go:126] Waiting 10m0s for node controller to sync
  
  I0301 10:13:47.224340       1 kube.go:309] Starting kube subnet manager
  
  I0301 10:13:48.225108       1 kube.go:133] Node controller sync successful
  
  I0301 10:13:48.225226       1 main.go:244] Created subnet manager: Kubernetes Subnet Manager - kube0.vm
  
  I0301 10:13:48.225236       1 main.go:247] Installing signal handlers
  
  I0301 10:13:48.229661       1 main.go:386] Found network config - Backend type: vxlan
  
  I0301 10:13:48.232685       1 vxlan.go:120] VXLAN config: VNI=1 Port=0 GBP=false DirectRouting=false
  
  E0301 10:13:48.238187       1 main.go:289] Error registering network: failed to acquire lease: node "kube0.vm" pod cidr not assigned
  
  I0301 10:13:48.238377       1 main.go:366] Stopping shutdownHandler...
  
  解决方法:
  
  编辑 /etc/kubernetes/manifests/kube-controller-manager.yaml ,在spec -> containers -> -command 下加入两行:
  
  - --allocate-node-cidrs=true
  
  - --cluster-cidr=10.244.0.0/16
  
  然后删除 kube-controller-manager ,它会自动重启,配置就生效了,稍等片刻flannel的状态就变成Running了。
  
  -> [root@kube0.vm] [~] kubectl delete -n kube-system pod/kube-controller-manager-kube0.vm
  
  pod "kube-controller-manager-kube0.vm" deleted
  
  只剩最后一个问题了,还有两个coredns的pod状态是"ContainerCreating"(可以查看前面的截图),也是由于容器网络导致的,删掉后自动重建新的就好了。
  
  -> [root@kube0.vm] [~] kubectl delete -n kube-system pod coredns-6955765f44-dr5wg coredns-6955765f44-zmxft
  
  pod "coredns-6955765f44-dr5wg" deleted
  
  pod "coredns-6955765f44-zmxft" deletedgit clone https://www.maidongpt.cn github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
  
  git clone https://www.jiniuylzc.cn  github.com/golang/net.git $GOPATH/src/golang.org/x/net
  
  git clone https://www.lecaixuangj.cn  github.com/golang/text.git $GOPATH/src/golang.org/x/text
  
  go get www.hendaylpt.cn-u github.com/golang/protobuf/{proto,protoc-gen-go}
  
  git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto
  
  protoDir=www.hendaylpt.cn
  
  www.lanboylpt.cn"../protos"
  
  outDir="www.yixingxzc.cn../languages/golang/gym"
  
  protoc -I ${protoDir}/ www.niujinzc.cn${protoDir}/*proto --go_out=plugins=grpc:${outDir}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值