K8S快速部署,替你踩坑

K8S快速部署

安装环境

  1. 安装docker,并且启动服务,设置为开机自启

    # 下载安装 docker 
    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    # 配置阿里云镜像加速 
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://k47rrbam.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    # 设置docker 为开机启动,并且启动docker
    systemctl enable docker
    systemctl start docker
    
  2. 安装k8s的核心组件

    • kubeadm
    • kubelet
    • kubectl

    安装 kubeadm | Kubernetes官方安装指南

    安装三个核心包,我们自带的服务器使用的是linuxcentos的发行版本,所以我们是red hat公司的开源发行版本

    cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
    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=kubelet kubeadm kubectl
    EOF
    
    # 将 SELinux 设置为 permissive 模式(相当于将其禁用)
    sudo setenforce 0
    sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    
    sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    
    sudo systemctl enable --now kubelet
    

    直接采用yum包安装,这里配置的yum镜像是google的镜像,在国内下载速度显然是很慢的,我们选择配置aliyun的镜像

    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=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    # 将 SELinux 设置为 permissive 模式(相当于将其禁用)
    sudo setenforce 0
    sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    
    sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    
    sudo systemctl enable --now kubelet
    

    这里需要注意一点,如果三个包是单独安装的,千万要注意版本兼容,这三个包本质上都是为了实现kubernetes的功能,三个包要相互协作,如果版本不兼容,可能会产生意料之外的错误。最好安装同一个版本

    然后就安装完毕了,就可以一些实现一些k8s的功能了

    kubeadm init # 初始化集群
    kubeadm join # 其他节点加入集群
    

    初始化集群时设置一些参数

    kubeadm init \
      --kubernetes-version 1.18.0 \
      --apiserver-advertise-address=0.0.0.0 \
      --service-cidr=10.96.0.0/16 \
      --pod-network-cidr=10.245.0.0/16 \
      --image-repository registry.aliyuncs.com/google_containers
    

    否则会到进入google仓库拉起,很浪费时间

Kubeadm

kubeadm 是一个用来开启和运行最小可用集群的工具

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zah2VOVA-1635912218396)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20211103092826051.png)]

我们可以查看kubeadm的帮助文档,可以看到kubeadm提供了一个创建两个节点的集群的demo

  1. 在第一个机器上,使用kubeadmkubeadm init的命令进行初始化集群。
  2. 在第二个机器上,使用kubeadm join相关参数就可以加入第一个节点创建的集群。如果有多台机器执行此指令,就组建了一个多台机器的计算机集群。

除此之外,我们具体地查看一下kubeadm的主要命令

  • kubeadm completion:用特别的bash zsh or shell命令输出
  • kubeadm config:管理集群的配置
  • kubeadm init:建立一个kubernetes控制台,初始化主节点
  • kubeadm join:运行其他机器加入集群
  • kubeadm reset:用于恢复通过 kubeadm init 或者 kubeadm join 命令对节点进行的任何变更
  • kubeadm token:管理kubeadm join使用的令牌
  • kubeadm upgrade:提升集群的版本
  • kubeadm version:查看版本信息
搭建k8s集群
  1. 先下载docker,然后配置阿里云镜像加速,启动服务并且设置开机自启,然后进行docker开启一个测试的容器

我们发现,有时候可能会出现一个问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I4Omw8UB-1635912218399)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20211103103742320.png)]

查询了相关资源,了解到了造成这问题的原因是docker缺少一个依赖包,libseccomp-devel,只要安装了这个包,问题就解决了

yum install -y libseccomp-devel

我们查了一下这个包是干啥的?

安全计算模式 seccomp(Secure Computing Mode)是自 Linux 2.6.10 之后引入到 kernel 的特性。一切都在内核中完成,不需要额外的上下文切换,所以不会造成性能问题。目前 在 Docker 和 Chrome 中广泛使用。使用 seccomp,可以定义系统调用白名单和黑名单,可以 定义出现非法系统调用时候的动作,比如结束进程或者使进程调用失败。
docker本身需要对linux内核的服务,我们在安装linux版本的时候,镜像id可能会造成这个问题,有的linux镜像中包含这个包就不会遇到这个问题。

  1. 按照上面的步骤安装k8s核心包,注意使用阿里云的镜像包

  2. 初始化主节点

    这里有很多坑

    • 要配置aliyun仓库,要不然卡到爆
    • 如果初始化过程中出现了错误,准备再次初始化之前,将上次初始化时创建的文件删除干净
    • 版本问题,节点使用版本必须高于下载的kubeadm的版本,我们在下载时,没有设置版本号,所以下载的时k8s的最新版本的,但是在阿里云的仓库中,没有和最新版想兼容的容器

    所以安装k8s的时候千万不要完全按照官方的步骤走,因为基于google镜像的速度真的感人

    我们这里要卸载k8s和删除相关的包,然后重新安装k8s,docker不需要重新操作

    删除k8s集群
    1. 删除k8s中的所有结点

      kubectl delete node -all
      
    2. 停止所有k8s服务

      for service in kube-apiserver kube-controller-manager kubectl kubelet kube-scheduler;
      do 
      	systemctl stop $service
      done
      
    3. 回退当前的节点的操作,并且删除所有的相关配置文件

      kubeadm reset -f
      
      rm -rf ~/.kube/
      
      rm -rf /etc/kubernetes/
      
      rm -rf /etc/systemd/system/kubelet.service.d
      
      rm -rf /etc/systemd/system/kubelet.service
      
      rm -rf /usr/bin/kube*
      
      rm -rf /etc/cni
      
      rm -rf /opt/cni
      
      rm -rf /var/lib/etcd
      
      rm -rf /var/etcd
      
      yum clean all
      
      yum remove kube*
      
    4. 然后删除docker的所有镜像

      docker rmi -r $(docker images -aq)
      

    重新安装k8s

    • 配置镜像
    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=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
    • 下载k8s,千万要指定版本,千万要指定版本,千万要指定版本 不然就会下载最新版,然后就掉坑了

      yum install -y kubelet-1.16.9 kubeadm-1.16.9  kubectl-1.16.9 
      
    • 设置开机启动

      systemctl enable kubelet
      
    • 初始化主节点

      kubeadm init \
        --kubernetes-version 1.18.8 \
        --apiserver-advertise-address=0.0.0.0 \
        --service-cidr=10.96.0.0/16 \
        --pod-network-cidr=10.245.0.0/16 \
        --image-repository registry.aliyuncs.com/google_containers
      

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FLLHbkEp-1635912218402)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20211103114609631.png)]

      集群创建成功,控制节点成功初始化

      结果最后一行给出的就是其他节点加入集群的脚本,因为需要令牌认证

      kubeadm join 172.16.188.15:6443 --token pke3nd.c45isxxsbuadz4a2 \
          --discovery-token-ca-cert-hash sha256:bb88f759348db4c3866e2dd7210069c405b8a520c377f470bb7b921ab81809a9
      

      我们在其他两个结点运行这个脚本,其他两个结点就加入了这个集群

      然后查看集群结点信息

      kubecrl get nodes
      

      我们发现又进坑了

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPrRntNH-1635912218404)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20211103115339140.png)]

      继续坑,这个是为啥呢

      需要将主节点的/etc/kubernetes/admin.conf配置文件拷贝从节点目录下,并且开启配置权限,刷新

      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
      

      然后再吃查看结点信息

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mmLIT9HM-1635912218405)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20211103115821833.png)]

      我们这样我们就可以看到集群的结点信息,集群的结点初始化和创建都是由kubeadm来负责的。

推荐一个无坑安装版安装Kubernetes(k8s)保姆级教程)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值