安装部署Kubernetes集群实战

kubernetes概述:

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Kubernetes是Google 2014年创建管理的,是Google 10多年大规模容器管理技术Borg的开源版本。

通过kubernetes可以实现的功能:

  • 快速部署应用
  • 快速扩展应用
  • 无缝对接新的应用功能
  • 节省资源,优化硬件资源的使用

我们的目标是促进完善组件和工具的生态系统,以减轻应用程序在公有云或私有云中运行的负担。

kubernetes的特点:

  • 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
  • 可扩展: 模块化, 插件化, 可挂载, 可组合
  • 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展

为什么要使用容器?容器优势总结:

  • 快速创建/部署应用:与VM虚拟机相比,容器镜像的创建更加容易。
  • 持续开发、集成和部署:提供可靠且频繁的容器镜像构建/部署,并使用快速和简单的回滚(由于镜像不可变性)。
  • 开发和运行相分离:在build或者release阶段创建容器镜像,使得应用和基础设施解耦。
  • 开发,测试和生产环境一致性:在本地或外网(生产环境)运行的一致性。
  • 云平台或其他操作系统:可以在 Ubuntu、RHEL、 CoreOS、on-prem、Google Container Engine或其它任何环境中运行。
  • Loosely coupled,分布式,弹性,微服务化:应用程序分为更小的、独立的部件,可以动态部署和管理。
  • 资源隔离
  • 资源利用:更高效

kubernetes能做什么?
可以在物理或虚拟机的Kubernetes集群上运行容器化应用,Kubernetes能提供一个以“容器为中心的基础架构”,满足在生产环境中运行应用的一些常见需求,如:

  • 多个进程(作为容器运行)协同工作。(Pod)
  • 存储系统挂载
  • Distributing secrets
  • 应用健康检测
  • 应用实例的复制
  • Pod自动伸缩/扩展
  • Naming and discovering
  • 负载均衡
  • 滚动更新
  • 资源监控
  • 日志访问
  • 调试应用程序
  • 提供认证和授权


kubernetes中文官网:
https://kubernetes.io/zh/
kubernetes中文社区:
https://www.kubernetes.org.cn/doc-11

搭建kubernetes集群

环境准备:

3台dockerhost主机(centos7)
master: 172.16.1.30
node01:172.16.1.31
node02:172.16.1.32
注意事项:每台虚拟机内存最少2GB,最低双核cpu,每台主机必须安装docker环境,关闭防火墙(一般kubernetes是运行在公司内部的),禁用selinux,确保时间同步。

我们现在安装kubernetes时,利用的是kubernetes官方开发出来的自动化部署的软件(kubeadm),以来实现更快速的安装kubernetes。

清空iptables规则,并重新加载docker:

[[email protected] ~]# iptables -F
[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl restart docker

(1)修改主机名:

[[email protected] ~]# hostnamectl  set-hostname  master
[[email protected] ~]# bash
[[email protected] ~]# hostnamectl  set-hostname  node01
[[email protected] ~]# bash
[[email protected] ~]# hostnamectl set-hostname node02
[[email protected] ~]# bash

(2)ssh,域名解析,免密登录:

配置域名解析:
[[email protected] ~]# vim /etc/hosts


##将hosts文件拷贝给其他节点:

[[email protected] ~]# scp /etc/hosts  [email protected]:/etc/hosts
[[email protected] ~]# scp /etc/hosts  [email protected]:/etc/hosts
免密登录:
[[email protected] ~]# ssh-keygen -t rsa  #生成密钥


将密钥拷贝给其他节点:
[[email protected] ~]# ssh-copy-id node01
[[email protected] ~]# ssh-copy-id node02

(3)禁用swap(kubernetes特性)
注意:所有节点都需禁用,不然无法加入集群。
[[email protected] ~]# swapoff -a #临时生效

永久禁用swap:(修改开机加载配置文件)
[[email protected] ~]# vim /etc/fstab

可以重新加载使其生效:
[[email protected] ~]# mount -a

安装kubernetes:

登录阿里巴巴开源镜像站,下载yum源:


编写自定义repo文件:(三个节点都需要部署)

[[email protected] yum.repos.d]# pwd
/etc/yum.repos.d
[[email protected] yum.repos.d]# vim kubernetes.repo

查看可用的repo源:
[[email protected] yum.repos.d]# yum repolist


##在本地生成缓存:
[[email protected] yum.repos.d]# yum makecache

##将repo文件拷贝给node01和node02:

[[email protected] yum.repos.d]# scp kubernetes.repo  node01:/etc/yum.repos.d/
[[email protected] yum.repos.d]# scp kubernetes.repo  node02:/etc/yum.repos.d/

接下来在两个节点上执行相同操作。

(2)打开iptables桥接功能(三个节点都需部署)

[[email protected] ~]# vim /etc/sysctl.d/k8s.conf    #在该目录下自定义conf文件
//添加以下配置项:
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
//重新加载文件使其生效:
[[email protected] ~]#  sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

注意:如果报“找不到文件”,我们需要加载一个模块:
[[email protected] ~]# modprobe br_netfilter

将配置文件拷贝给node01和node02进行部署。

(3)打开路由转发(三个节点都需部署)

[[email protected] ~]# echo net.ipv4.ip_forward = 1 > /etc/sysctl.conf
[[email protected] ~]# sysctl -p   #加载该文件,使其生效
net.ipv4.ip_forward = 1

同样的将配置文件拷贝给node01和node02进行部署。



(4)在master节点上进行操作:

#修改yum的配置文件,缓存下面要下载的rpm包:
[[email protected] ~]# vim /etc/yum.conf 


进行下载:
[[email protected] ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0 kubectl-1.15.0-0

下载完成后查看是否缓存了rpm包:
[[email protected] ~]#  cd /var/cache/yum/x86_64/7/kubernetes/packages

##将服务加入开机自启:
[[email protected] ~]# systemctl enable kubelet.service

初始化集群(下载镜像):
可是由于国内网络环境限制,我们不能直接从谷歌的镜像站下载镜像,这时,需要我们手工从docker镜像站下载镜像,然后重新命名,这里用脚本来实现。
脚本部分内容如下:
#可以参考这样的格式进行下载:
[[email protected] ~]# cat k8s.sh
#!/bin/bash
docker pull mirrorgooglecontainers/kube-apiserver:v1.14.1
docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.1
docker pull mirrorgooglecontainers/kube-scheduler:v1.14.1
docker pull mirrorgooglecontainers/kube-proxy:v1.14.1
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1

这里我是已经下载好了,只需要导入形影的镜像即可:
[[email protected] ~]# mkdir images
[[email protected] ~]# cd images/

导入镜像命令:docker load --input

##初始化集群:
[[email protected] images]# kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

参数解释:
--kubernetes-version:指定当前kubernetes版本号(查看版本:kubelet --version)
--pod-network: 指定pod网段,kubernetes默认指定网络。
--ignore:忽略所有报错

注意:如果初始化成功后的信息信息被覆盖了想要重新初始化,可以先执行kubeadm reset命令重置一下,再重新初始化。
而当你执行完重置命令后,初始化时,可能会报以下错误:

报错指的是数据库的一个error,所以我们需要将该目录该删除掉,就可以重新初始化了:
[[email protected] ~]# rm -rf /var/lib/etcd

##根据上面的提示创建目录并授予权限:

[[email protected] ~]# mkdir -p $HOME/.kube
[[email protected] ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[[email protected] ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

##查看节点:

可以看出master的状态是未就绪(NotReady),之所以是这种状态是因为还缺少一个附件flannel,没有网络各Pod是无法通信的。

#部署docker容器的跨主机网络:

//将该yml文件下载到本地:
[[email protected] ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

//执行该yml文件:
[[email protected] ~]# kubectl apply -f kube-flannel.yml 

//查看配置好的yml文件:

(5)以上是主节点的安装部署,然后个node几点的安装
####node01和node02分别进行下载(无需安装kubectl):
[[email protected] ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0
[[email protected] ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0

###下载完成后将该服务加入开机自启:
[[email protected] ~]# systemctl enable kubelet.service
[[email protected] ~]# systemctl enable kubelet.service 

node01:(导入本地镜像)

[[email protected] ~]# mkdir images
[[email protected] ~]# cd images/


##将这些镜像拷贝给node02,进行安装:
[[email protected] images]# scp * node02:/root/images

##导入后查看node02镜像:

(6)将node01和node02节点加入集群:
执行以下命令加入集群(在初始化集群是生成的,并且每次的值都是不同的)
kubeadm join 172.16.1.30:6443 --token 6udpmi.u4msx9vgkqfr1i1l --discovery-token-ca-cert-hash sha256:4fdbbb94d5d7087a6c27d441df2f89d21e9ca035f0386ed963a195656794619a

node02节点执行同样的操作。

##当node01和node02加入集群后,在master上查看节点的信息:

确保有其他节点的信息,并且状态都为ready。

注意:如果状态为NotReady,那就是网络的问题,没有部署跨主机网络,则需要执行上面部署docker容器的跨主机的网络。

至此kubernetes集群已经搭建完毕---------------------

接来下进行优化操作:

(1)更改tab距离:
[[email protected] ~]# vim .vimrc
set tabstop=2
[[email protected] ~]# source .vimrc
(2)//kubect命令自动补全:
[[email protected] ~]# yum install -y bash-completion
[[email protected] ~]# source /usr/share/bash-completion/bash_completion
[[email protected] ~]# source <(kubectl completion bash)
[[email protected] ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
(3)//查看运行中的pod资源(资源对象中的一种),-n:namespace  kube-system(kubernetes自带的命名空间)
[[email protected] ~]# kubectl get pods -n kube-system


部署kubernetes集群内容到此完毕。。。

———————— 本文至此结束,感谢阅读 ————————

原文地址:https://blog.51cto.com/13972012/2447791

时间: 2024-08-02 07:35:04

安装部署Kubernetes集群实战的相关文章

kubernetes系列03—kubeadm安装部署K8S集群

1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm 安装kubernetes(本文演示的就是此方法) 优点:你只要安装kubeadm即可:kubeadm会帮你自动部署安装K8S集群:如:初始化K8S集群.配置各个插件的证书认证.部署集群网络等.安装简易. 缺点:不是自己一步一步安装,可能对K8S的理解不会那么深:并且有那一部分有问题,自己不好修正. 1.3.2 方法2:二进制安装部署k

Shell脚本快速部署Kubernetes集群系统

本文紧跟上节所讲的手动部署Kubernetes管理Docker篇所写,本篇主要内容利用Shell脚本完成快速部署Kubernetes集群.上节博文看过的朋友也能感觉到部署过程相对比较简单,那么,出于简化工作流程,推进运维自动化角度来说,于是花了2/3天时间写这个部署Kubernetes脚本. 运维工作中,常常会遇到部署各种各样的服务,建议:常规部署都应该尽量使用脚本完成,一方面提高自身脚本编写能力,另一方面推进运维自动化. 详细部署说明文档:http://lizhenliang.blog.51c

CentOS7部署Kubernetes集群

CentOS7部署Kubernetes集群 简介 Kubernetes是什么? Kubernetes一个用于容器集群的自动化部署.扩容以及运维的开源平台. 通过Kubernetes,你可以快速有效地响应用户需求: a.快速而有预期地部署你的应用 b.极速地扩展你的应用 c.无缝对接新的应用功能 d.节省资源,优化硬件资源的使用 我们希望培育出一个组件及工具的生态,帮助大家减轻在公有云及私有云上运行应用的负担. Kubernetes特点: a.可移植: 支持公有云,私有云,混合云,多重云(mult

使用Rancher的RKE快速部署Kubernetes集群

简要说明: 本文共涉及3台Ubuntu机器,1台RKE部署机器(192.168.3.161),2台Kubernetes集群机器(3.162和3.163). 先在Windows机器上,将rke_linux-amd64从github上下载下来,重新命名为rke ,编辑好cluster.yml集群部署文件,使用putty提供的pscp命令,将文件上传到3.161机器上.在3.161机器上,执行rke命令,将集群部署到3.162和3.163机器上. 只要环境配置正确,部署非常快,整个集群5分钟搞定. 准

使用kubeadm部署kubernetes集群

使用kubeadm部署kubernetes集群 通过docker,我们可以在单个主机上快速部署各个应用,但是实际的生产环境里,不会单单存在一台主机,这就需要用到docker集群管理工具了,本文将简单介绍使用docker集群管理工具kubernetes进行集群部署. 1 环境规划与准备 本次搭建使用了三台主机,其环境信息如下:| 节点功能 | 主机名 | IP || ------|:------:|-------:|| master | master |192.168.1.11 || slave1

二进制部署 Kubernetes 集群

二进制部署 Kubernetes 集群 提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环境. kubeadm Kubeadm也是一个工具,提供kubeadm init和kubeadm join指令,用于快速部署Kubernetes集群. 二进制包 从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群. 小结:生产环境中部署Kub

使用docker安装部署Spark集群来训练CNN(含Python实例)

使用docker安装部署Spark集群来训练CNN(含Python实例) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需转载,请附上本文链接,不甚感激! http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器,每台有8个tesla-GPU,然而平时做实验都只使用了其中的一个GPU,实在暴遣天物! 于是想用spark来把这些GPU都利用起来.听闻d

CentOS7.X环境下基于docker安装部署RabbitMQ集群

1.IP地址规划(将信息配置到/etc/hosts中)主机名 IP地址RabbitMQ01 192.168.8.131RabbitMQ02 192.168.8.132RabbitMQ03 192.168.8.133RabbitMQ04 192.168.8.1342.RabbitMQ集群安装(1)四个节点同时运行,下载RabbitMQ镜像[[email protected]~]# docker pull rabbitmq:3-management(2)四个节点分别运行,启动RabbitMQ容器 [

CentOS7.5 使用 kubeadm 安装配置 Kubernetes 集群(四)

在之前的文章,我们已经演示了 yum 和二进制方式的安装方式,本文我们将用官方推荐的 kubeadm 来进行安装部署. kubeadm 是 Kubernetes 官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验kubeadm可以学习到Kubernetes官方在集群配置上一些新的最佳实践. 一.环境准备 1.软件版本 软件 版本 kubernetes v1.12.2 CentOS 7.