热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用kubeadm搭建测试kubernetes集群

使用工具   https:kubernetes.iodocssetupindependentcreate-cluster-kubeadmkubeadm简介:  kubeadm是ku

使用工具

    https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

kubeadm简介:

    kubeadm是kubernetes自带的快速搭建kubernetes集群的工具,方便快捷,并且很好的支持自定义搭建。它在开源社区还是很有活力的,虽然目前kubeadm目前还不能用于生产环境,但是伴随着kubenetes版本的更新都会同步更新,方便了版本的升级。

服务器list

节点:

    node1  (master)

    node2  (slaver)

    node3 (slaver)

主要配置:

系统 Centos7.5
docker 18.03.0
kubernetes 1.8.3
kubeadm 1.8.3
driver 396.45
GPU TITAN

步骤

配置master节点的步骤:

    1. 关闭防火墙(为了保证开发kubernetes各个组件的端口,为了通讯)

systemctl stop firewalld

systemctl disable firewalld

systemctl status firewalld

     2.  禁用SELINUX

setenforce 0

vi /etc/selinux/config  //修改SELINUX=disabled

     3.  创建并修改/etc/sysctl.d/k8s.conf文件,添加如下内容:

net.bridge.bridge-nf-call-ip6tables = 1

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

net.ipv4.ip_forward = 1     //Docker从1.13版本开始调整了默认的防火墙规则,禁用了iptables filter表中FOWARD链,导致pod无法通信

          执行sysctl -p /etc/sysctl.d/k8s.conf使修改生效。

     4.  Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动(当然我们也可以通过修改kubelet的启动参数-fail-swap-on=false更改这个限制)

swapoff -a

free -m      //查看

          swappiness参数调整,修改/etc/sysctl.d/k8s.conf添加下面一行:

vm.swappiness=0

         执行sysctl -p /etc/sysctl.d/k8s.conf使修改生效。

     5.  启动docker

systemctl start docker

systemctl status docker

     6. 安装kubeadm、kubelet、kubectl

//配置kubernetes repo

cat < /etc/yum.repos.d/kubernetes.repo

[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

//安装

yum makecache fast

yum install -y kubeadm-1.8.3-0.x86_64 kubelet-1.8.3-0.x86_64 kubectl-1.8.3-0.x86_64

          注意:这里的源都换成阿里的源,因为无法***,安装的时候要注意版本,如果按照默认安装的话,kubeadm无法配置kubernetes-v1.8.3版本

  7.  配置kubelet,修改kubelet的启动环境变量要与docker的cgroup-driver驱动一样,通过docker info查看docker的cgroup-driver驱动,我们这里是cgroupfs

//修改kubelet的启动环境变量为(EnvirOnment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"

vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

//设置开机启动kubelet   启动kubelet

systemctl enable kubelet.service

systemctl start kubelet.service

          注意:如果这里没有启动起来不用着急,因为在kubeadm init的时候会主动去配置拉起kubelet的

      8.   准备join的时候必要的镜像:

        kube-apiserver-amd64:v1.8.3、kube-controller-manager-amd64:v1.8.3、kube-scheduler-amd64:v1.8.3、kube-proxy-amd64:v1.8.3、etcd-amd64:3.0.17、k8s-dns-sidecar-amd64:1.14.5、k8s-dns-kube-dns-amd64:1.14.5、k8s-dns-dnsmasq-nanny-amd64:1.14.5、pause-amd64:3.0

         因为默认的是从gcr.io pull镜像,所以没有***的话是下载不下来的,init不能通过,所以请“安家”这个仓库中下载

docker pull anjia0532/kube-apiserver-amd64:v1.8.3

docker pull anjia0532/kube-controller-manager-amd64:v1.8.3

docker pull anjia0532/kube-scheduler-amd64:v1.8.3

docker pull anjia0532/kube-proxy-amd64:v1.8.3

docker pull anjia0532/etcd-amd64:3.0.17

docker pull anjia0532/k8s-dns-sidecar-amd64:1.14.5

docker pull anjia0532/k8s-dns-kube-dns-amd64:1.14.5

docker pull anjia0532/k8s-dns-dnsmasq-nanny-amd64:1.14.5

docker pull anjia0532/pause-amd64:3.0

//注意:这里一定要tag回原来的镜像前缀

docker tag anjia0532/kube-apiserver-amd64:v1.8.3 gcr.io/google_containers/kube-apiserver-amd64:v1.8.3

docker tag anjia0532/kube-controller-manager-amd64:v1.8.3 gcr.io/google_containers/kube-controller-manager-amd64:v1.8.3

docker tag anjia0532/kube-scheduler-amd64:v1.8.3 gcr.io/google_containers/kube-scheduler-amd64:v1.8.3

docker tag anjia0532/kube-proxy-amd64:v1.8.3 gcr.io/google_containers/kube-proxy-amd64:v1.8.3

docker tag anjia0532/etcd-amd64:3.0.17 gcr.io/google_containers/etcd-amd64:3.0.17

docker tag anjia0532/k8s-dns-sidecar-amd64:1.14.5 gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.5

docker tag anjia0532/k8s-dns-kube-dns-amd64:1.14.5 gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.5

docker tag anjia0532/k8s-dns-dnsmasq-nanny-amd64:1.14.5 gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.5

docker tag anjia0532/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0

     9.  一切准备就绪,开始init(因为我们选择flannel作为Pod网络插件,所以指定–pod-network-cidr=10.244.0.0/16)

kubeadm init \

  --kubernetes-version=v1.8.3 \                     //kubernetes版本指定

  --pod-network-cidr=10.244.0.0/16 \                //选择flannel作为Pod网络插件

  --apiserver-advertise-address=node1IP      //master节点的IP地址

        安装结束后会给出join node节点的指令:

kubeadm join --token 392097.33e902455 node1IP:6443 --discovery-token-ca-cert-hash sha256:83aa5c4ef343dcb9fb5f2f44c1febbd10a3a520e540745e9b

     10.  配置kubectl(init之后会自动生成admin.conf,这个文件用于给普通用户配置kubectl访问集群,在这里我们配置的是root用户的kubectl)

mkdir -p ~/.kube

cp -i /etc/kubernetes/admin.conf ~/.kube/config

chown root:root ~/.kube/config

     11.  查看master启动情况(controller-manager、scheduler、etcd-0都是healthy的状态)

kubectl get cs

 

网络插件的安装:

     12.  由于docker用的是虚拟的IP地址,所以为了保证各个node节点的pods可以互相通信访问,我们在这里安装flannel网络插件:

            kube-flannel.yml下载并启动

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubectl apply -f  kube-flannel.yml

 

加入node节点的步骤:

当我们配置好master节点的时候,我们就可以往集群中加入node节点,登陆node节点(要有root权限)做以下操作:

    1 ~ 7 同master节点

    8.   准备join的时候必要的镜像:

       kube-proxy-amd64:v1.8.3、k8s-dns-sidecar-amd64:1.14.5、k8s-dns-kube-dns-amd64:1.14.5、k8s-dns-dnsmasq-nanny-amd64:1.14.5、pause-amd64:3.0以及网络插件flannel的镜像quay.io/coreos/flannel:v0.10.0-amd64

         因为默认的是从gcr.io pull镜像,所以没有***的话是下载不下来的,导致node节点加入之后一直处于NotReady的状态,所以请“安家”这个仓库中下载

docker pull anjia0532/kube-proxy-amd64:v1.8.3

docker pull anjia0532/k8s-dns-sidecar-amd64:1.14.5

docker pull anjia0532/k8s-dns-kube-dns-amd64:1.14.5

docker pull anjia0532/k8s-dns-dnsmasq-nanny-amd64:1.14.5

docker pull anjia0532/pause-amd64:3.0

docker pull quay.io/coreos/flannel:v0.10.0-amd64

//注意:这里一定要tag回原来的镜像前缀

docker tag anjia0532/kube-proxy-amd64:v1.8.3 gcr.io/google_containers/kube-proxy-amd64:v1.8.3

docker tag anjia0532/k8s-dns-sidecar-amd64:1.14.5 gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.5

docker tag anjia0532/k8s-dns-kube-dns-amd64:1.14.5 gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.5

docker tag anjia0532/k8s-dns-dnsmasq-nanny-amd64:1.14.5 gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.5

docker tag anjia0532/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0

     9.  一切准备就绪,开始加入

kubeadm join --token 392097.b33e902455 node1:6443 --discovery-token-ca-cert-hash sha256:3dcb9fb5f2f44c1febbd83a803010a3a520e540745e9b

     10.  结果查看(去master节点上查看)(三个节点都是Ready的状态)

kubectl get nodes

利用kubeadm搭建测试kubernetes集群

安装dashboard:

在这里选择你要安装的dashboard的版本,在这里我是使用了dashboard-1.8.3版本(注意:这个操作是在主节点上的)

注意:如果在这里你是通过如下的方式下载的yaml文件,那么你需要修改一下Service,添加type:NodePort,并设置访问的端口,Kubernetes目前只支持30000以上的端口,在这里我们设置的是30001端口

wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

create之后,通过https://node1IP:30001就可以直接访问

利用kubeadm搭建测试kubernetes集群

那么我们如何登陆呢,他有两个方式登录,第一种是config文件的方式,还有一种是token方式,config文件也依赖token,那么我们如何获取这个token呢?管理员在新建namespace的时候需要给 不同队列的用户建立不同的 token,来作为权限管理。在这里我们是管理员权限。

我们来给管理员admin建立一个token(admin-role.yaml如下):

 折叠源码

kind: ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1beta1

metadata:

  name: admin

  annotations:

    rbac.authorization.kubernetes.io/autoupdate"true"

roleRef:

  kind: ClusterRole

  name: cluster-admin

  apiGroup: rbac.authorization.k8s.io

subjects:

- kind: ServiceAccount

  name: admin

  namespace: kube-system

---

apiVersion: v1

kind: ServiceAccount

metadata:

  name: admin

  namespace: kube-system

  labels:

    kubernetes.io/cluster-service"true"

    addonmanager.kubernetes.io/mode: Reconcile

创建之后获取token 的值:

kubectl -n kube-system get secret | grep admin-token

kubectl -n kube-system describe secret admin-token-46t69

记录token这个值,并将其加在config文件的最后一行

如果你的集群是GPU集群,那么你就需要安装下面的插件

安装k8s-device-plugin

具体参考:https://github.com/NVIDIA/k8s-device-plugin

功能:

  1. 在集群中暴露出来每台node的GPU卡数
  2. 可以用来持续跟踪GPU的健康情况
  3. 在集群的container运行GPU

它会在master节点上部署一个DaemonSet,他会在所有可以调度的node节点上起要求起的pods,如果有机器加入,他会在默认的机器上起服务,如果有删除,他也会在这台机器上删除pods。

如果你想让master节点也承载一些任务,那么你就需要给master节点打上一个label:node-role.kubernetes.io/node:

kubectl taint nodes yz-gpu-k8s002.hogpu.cc node-role.kubernetes.io/master-

 

              完成部署~

 

 

 


推荐阅读
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • MVC模式下的电子取证技术初探
    本文探讨了在MVC(模型-视图-控制器)架构下进行电子取证的技术方法,通过实际案例分析,提供了详细的取证步骤和技术要点。 ... [详细]
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 探索Java 11中的ZGC垃圾收集器
    Java 11引入了一种新的垃圾收集器——ZGC,由Oracle公司研发,旨在支持TB级别的内存容量,并保证极低的暂停时间。本文将探讨ZGC的开发背景、技术特点及其潜在的应用前景。 ... [详细]
  • 本文探讨了使用普通生成函数和指数生成函数解决组合与排列问题的方法,特别是在处理特定路径计数问题时的应用。文章通过详细分析和代码实现,展示了如何高效地计算在给定条件下不相邻相同元素的排列数量。 ... [详细]
  • 本文探讨了如何利用RxJS库在AngularJS应用中实现对用户单击和拖动操作的精确区分,特别是在调整区域大小的场景下。 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
  • 本文介绍了如何在 Oracle 数据库中查询重复数据,并提供了多种方法来筛选和删除重复记录,包括基于单个字段和多个字段的重复数据处理。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
author-avatar
Kevinczp
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有