温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

安装部署Kubernetes集群实战

发布时间:2020-07-02 17:14:45 来源:网络 阅读:1009 作者:wx5b9c94b17c62a 栏目:云计算

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(全部节点都需操作):

[root@master ~]# iptables -F
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker

(1)修改主机名:

[root@sqm-docker01 ~]# hostnamectl  set-hostname  master
[root@sqm-docker01 ~]# bash
[root@sqm-docker02 ~]# hostnamectl  set-hostname  node01
[root@sqm-docker02 ~]# bash
[root@sqm-docker03 ~]# hostnamectl set-hostname node02
[root@sqm-docker03 ~]# bash

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

配置域名解析:
[root@master ~]# vim /etc/hosts

安装部署Kubernetes集群实战
##将hosts文件拷贝给其他节点:

[root@master ~]# scp /etc/hosts  root@172.16.1.31:/etc/hosts
[root@master ~]# scp /etc/hosts  root@172.16.1.32:/etc/hosts
免密登录:
[root@master ~]# ssh-keygen -t rsa  #生成密钥

安装部署Kubernetes集群实战
将密钥拷贝给其他节点:
[root@master ~]# ssh-copy-id node01
[root@master ~]# ssh-copy-id node02

(3)禁用swap(kubernetes特性)
注意:所有节点都需禁用,不然无法加入集群。
[root@master ~]# swapoff -a #临时生效
安装部署Kubernetes集群实战

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

安装部署Kubernetes集群实战

可以重新加载使其生效:
[root@master ~]# mount -a

安装kubernetes:

登录阿里巴巴开源镜像站,下载yum源:
安装部署Kubernetes集群实战
安装部署Kubernetes集群实战
编写自定义repo文件:(三个节点都需要部署)

[root@master yum.repos.d]# pwd
/etc/yum.repos.d
[root@master yum.repos.d]# vim kubernetes.repo

安装部署Kubernetes集群实战

查看可用的repo源:
[root@master yum.repos.d]# yum repolist

安装部署Kubernetes集群实战
##在本地生成缓存:
[root@master yum.repos.d]# yum makecache
安装部署Kubernetes集群实战
##将repo文件拷贝给node01和node02:

[root@master yum.repos.d]# scp kubernetes.repo  node01:/etc/yum.repos.d/
[root@master yum.repos.d]# scp kubernetes.repo  node02:/etc/yum.repos.d/

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

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

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

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

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

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

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

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


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

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

安装部署Kubernetes集群实战
进行下载:
[root@master ~]# yum -y install kubelet-1.15.0-0 kubeadm-1.15.0-0 kubectl-1.15.0-0

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

安装部署Kubernetes集群实战

##将服务加入开机自启:
[root@master ~]# systemctl enable kubelet.service
安装部署Kubernetes集群实战
初始化集群(下载镜像):
可是由于国内网络环境限制,我们不能直接从谷歌的镜像站下载镜像,这时,需要我们手工从docker镜像站下载镜像,然后重新命名,这里用脚本来实现。
脚本部分内容如下:
#可以参考这样的格式进行下载:
[root@master ~]# 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

这里我是已经下载好了,只需要导入形影的镜像即可:
[root@master ~]# mkdir images
[root@master ~]# cd images/
安装部署Kubernetes集群实战
导入镜像命令:docker load --input
安装部署Kubernetes集群实战

##初始化集群:
[root@master 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:忽略所有报错

安装部署Kubernetes集群实战

注意:如果初始化成功后的信息信息被覆盖了想要重新初始化,可以先执行kubeadm reset命令重置一下,再重新初始化。
而当你执行完重置命令后,初始化时,可能会报以下错误:
安装部署Kubernetes集群实战
报错指的是数据库的一个error,所以我们需要将该目录该删除掉,就可以重新初始化了:
[root@master ~]# rm -rf /var/lib/etcd

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

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

##查看节点:
安装部署Kubernetes集群实战
可以看出master的状态是未就绪(NotReady),之所以是这种状态是因为还缺少一个附件flannel,没有网络各Pod是无法通信的。

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

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

安装部署Kubernetes集群实战

//执行该yml文件:
[root@master ~]# kubectl apply -f kube-flannel.yml 

安装部署Kubernetes集群实战

//查看配置好的yml文件:
安装部署Kubernetes集群实战

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

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

node01:(导入本地镜像)

[root@node01 ~]# mkdir images
[root@node01 ~]# cd images/

安装部署Kubernetes集群实战
安装部署Kubernetes集群实战

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

##导入后查看node02镜像:
安装部署Kubernetes集群实战

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

node02节点执行同样的操作。

##当node01和node02加入集群后,在master上查看节点的信息:
安装部署Kubernetes集群实战
确保有其他节点的信息,并且状态都为ready。

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

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

接来下进行优化操作:

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

安装部署Kubernetes集群实战
部署kubernetes集群内容到此完毕。。。

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI