>>分享SPSS,Hadoop等大数据处理技术,以及分布式架构以及集群系统的构建 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 20515 个阅读者 刷新本主题
 * 贴子主题:  kubeadm安装k8s集群1.17版本 回复文章 点赞(0)  收藏  
作者:mary    发表时间:2020-03-11 18:05:50     消息  查看  搜索  好友  邮件  复制  引用

  

kubeadm安装k8s集群1.17版本

一、安装要求:

满足以下条件
一台或多台机器,操作系统 CentOS7.x-86_x64
硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
集群中所有机器之间网络互通
可以访问外网,需要拉取镜像
禁止swap分区


     说在前面的话,kubeadm是k8s官方推出的一个用于快速部署一套k8s集群的工具,而在近几年现在kubeadm上生产的公司也有了,不过对于各个方面对于集群的管理以及二次性的开发,大多数都是采用二进制的方式进行去部署生产上的k8s集群,由于k8s版本更新比较频繁,像对于拿k8s集群进行一些测试方面的操作,平时希望自己能够快速的部署一套进行测试,而对于二进制以及Ansible部署的方式当然也可以部署,不过二进制就慢了很多,像ansible的话还得需要一台服务器单独拿出来做管理节点,对于我们平时拿虚拟机去测试的话,如果自己的机器比较紧张,kubeadm也是一个比较不错的选择,另外也是尝试一下新版本的k8s,紧跟官方新版本的脚步。

话不多说,进入正题

在kubeadm中有两条重要的命令,一个是kubeadm init,一个是kubeadm join, init 主要的实现就是去创建一个master节点,而在运行init之后,首先会运行一系列的输出,首先它会检查你的docker版本或者你的swap有没有关闭,因为docker首先是必须要运行的,在k8s集群中,docker是用来启动我们的容器和镜像的下载的,而swap需要进行关闭,这是k8s官方提出的一个默认的规则,在k8s-1.8之后就是需要你关闭swap,否则会出现报错,目的开启swap会占用大的内存,也会对性能影响很大的消耗。

     第二它会生成一个用来认证k8s组件之间进行调用的CA证书,证书有两套,第一个就是k8s的证书,另一套就是etcd的证书,而这个证书kubeadm安装的放置证书的位置在/etc/kubernetes/pki下面。

     第三它会把kubelet、controller-manager和scheduler等组件的配置文件写到/etc/kubernets/目录中,里面包含了一些证书文件,这些主要用来连接api-server,除了上面几个配置文件,还会生成一个管理相关的admin.conf文件

     第四它会生成token文件,如果其他节点加入进来到master的话,就会使用到这个token

     第五设置一些允许节点以 Bootstrap Tokens) 和 TLS bootstrapping 方式加入集群的必要的操作
设置csr请求自动认证的机制,这个的话,kubeadm是自己做好的,部署过二进制的应该知道,当node加入进来的时候,我们需要对它授权approve,手动允许加入集群中

     第六,部署dns服务,kube-proxy插件,当然一般DNS服务需要我们部署好flannel网络插件之后,这个服务才能运行起来

     大概的流程是这样的,详情请看官网文档
https://kubernetes.io/

二、集群配置

k8s-master            192.168.1.15
k8s-node1             192.168.1.11
k8s-node2             192.168.1.14

   系统初始化配置(每个节点都需要配置)

     关闭防火墙:    

#systemctl stop firewalld
#systemctl disable firewalld

  关闭selinux:    

#sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
#setenforce 0  # 临时

  关闭swap:    

#swapoff -a  # 临时
#vim /etc/fstab  # 永久

  设置主机名:主机名根据自己的主机去使用这条命令

#hostnamectl set-hostname <hostname>

     每台主机添加hosts:    

#cat >> /etc/hosts << EOF
192.168.1.15 k8s-master
192.168.1.11 k8s-node1
192.168.1.14 k8s-node2
EOF

  将桥接的IPv4流量传递到iptables的链:    

#cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#sysctl --system  # 生效

  时间同步:    

#yum install ntpdate -y
#ntpdate us.pool.ntp.org

三、 所有节点安装Docker/kubeadm/kubelet

Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。
3.1 安装Docker    

#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#yum -y install docker-ce-18.06.1.ce-3.el7
#systemctl enable docker && systemctl start docker
#docker --version
Docker version 18.06.1-ce, build e68fc7a

  镜像加速剂
Daocloud公司建议使用,提高镜像下载速度,使用k8s官方默认的cgroup的    

systemd
#more /etc/docker/daemon.json
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"exec-opts":["native.cgroupdriver=systemd"]
}
重启docker
#systemctl restart docker

   3.2 所有节点添加阿里云YUM软件源    

#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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

   3.3 所有节点安装kubeadm,kubelet和kubectl
由于版本更新频繁,这里指定版本号部署:    

#yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
#systemctl enable kubelet

四、部署Kubernetes Master

在192.168.1.15(Master)执行
并将--apiserver -advertise-address的地址写成master的地址
由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
对于其他的办法,或者就是提前将镜像下载好,然后导进去,其实这块阿里云仓库默认已经有维护的k8s组件的镜像了,这里直接可以使用    

#kubeadm init \
--apiserver-advertise-address=192.168.1.15 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.17.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

  kubeadm init,执行init 初始化之后会显示k8s的版本,第二就是检查配置比如swap关闭,docker的cgroup,k8s默认需要的是systemd的驱动程序,另外需要去下载k8s组件所需要的镜像,这里需要等待一会.....    

[init] Using Kubernetes version: v1.17.0
Running pre-flight checks
Pulling images required for setting up a Kubernetes cluster
This might take a minute or two, depending on the speed of your internet connection
You can also perform this action in beforehand using 'kubeadm config images pull'

  使用kubectl工具:
默认init初始化之后会输入下面应该操作的步骤,直接执行    

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

  由于我们的网络cni插件还没有部署,所以它的状态一直是未就绪状态    

#kubectl get nodes
NAME         STATUS     ROLES    AGE   VERSION
k8s-master   NotReady   master   19m   v1.17.0

五、安装Pod网络插件(CNI)

#mkdir /k8s-cni
#wget -P /k8s-cni https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

  默认这个网络插件下载会出现一些问题,拉取不到,导致网络不通,节点无法准备就绪
可以改成这个镜像地址,到flannel的yaml下,找到amd64有两行放置flannel的镜像的位置替换为:zhaocheng172/flannel:v0.11.0-amd64
确保flannel起来    

#kubectl get pod -A
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-9d85f5447-htzgm              1/1     Running   0          27m
kube-system   coredns-9d85f5447-sz9kg              1/1     Running   0          27m
kube-system   etcd-k8s-master                      1/1     Running   0          27m
kube-system   kube-apiserver-k8s-master            1/1     Running   0          27m
kube-system   kube-controller-manager-k8s-master   1/1     Running   0          27m
kube-system   kube-flannel-ds-amd64-5r2qv          1/1     Running   0          4m13s
kube-system   kube-proxy-npgrm                     1/1     Running   0          27m
kube-system   kube-scheduler-k8s-master            1/1     Running   0          27m

六、加入Kubernetes Node

在192.168.1.11/14(Node)执行。
向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:
加入之后需要等待一会时间,因为它会像k8s的node节点都启动两个flanneld的进行,打通跨主机节点之间容器的通信,验证命令kubectl get pod -A    

#kubeadm join 192.168.1,15:6443 --token esce21.q6hetwm8si29qxwn \
  --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5

七、查看node是否加入进来

#kubectl get node
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   55m   v1.17.0
k8s-node1    Ready    <none>   25m   v1.17.0
k8s-node2    Ready    <none>   25m   v1.17.0

----------------------------
原文链接:https://blog.51cto.com/14143894/2475838
作者:赵程


程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 admin 在 2020-03-14 13:49:47 重新编辑]
  Java面向对象编程-->输入与输出(下)
  JavaWeb开发-->在Web应用中访问Web服务
  JSP与Hibernate开发-->Java对象持久化技术概述
  Java网络编程-->基于MVC和RMI的分布式应用
  精通Spring-->Vue CLI脚手架工具
  Vue3开发-->通过Axios访问服务器
  数据治理到底能治什么,怎么治
  Spark客户端之Spark Submit的使用
  spark-redis使用简易脚本
  Spark学习之Redis
  Hadoop安装过程
  Kubernetes(K8S)集群管理Docker容器(部署篇)
  Spark on Yarn with Hive实战案例与常见问题解决
  基于Spark MLlib平台的协同过滤算法---电影推荐系统
  kafka作为流式处理的上一层,为什么吞吐量那么大?
  Java处理大数据小技巧总结
  Hadoop2.6.5+centos7.5三节点大数据集群部署搭建
  如何设计实时数据平台(设计篇)-wx5c2da66615f74的博客
  Hadoop与Spring的集成
  学习大数据处理需要掌握的技能
  Hadoop生态系统介绍
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。