热门标签 | 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-

 

              完成部署~

 

 

 


推荐阅读
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了在CentOS 7.x上进行端口映射配置的方法,通过修改内核和配置防火墙实现端口映射。作者分享了自己使用华为服务器进行端口映射的经验,发现网速比直连还快且稳定。详细的配置过程包括开启系统路由模式功能、设置IP地址伪装、设置端口映射等。同时,还介绍了如何监听本地端口的tcp请求,以及删除规则和开放的端口的方法。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • express工程中的json调用方法
    本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
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社区 版权所有