kubeadm部署kubernetes(k8s)集群

网友投稿 239 2022-10-28

kubeadm部署kubernetes(k8s)集群

一、kubernetes简介

一)、kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

二)、Kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,Kubeadm可以学习到Kubernetes官方在集群配置上的一些最佳实践。

三)Kubernetes 特点

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

本片博文主要介绍如何部署Kubernetes集群,想要对Kubernetes有更深入的了解请参考kubernetes官方网站

二、实验环境

主机名 IP地址 系统版本 基于的服务
master 192.168.45.129 Centos 7.3 Docker 18.09.0
node01 192.168.45.141
node02 192.168.45.142

实验基本要求:

cpu:双核 MEM: 最低2G 关闭防火墙,iptables清空,禁用selinux。 三台node节点时间与主机必须同步,全部禁用swap

三、案例实施

一)、部署前的准备三台docker主机都要执行以下操作注:关闭防火墙,iptables清空,禁用selinux。还有要做到,时间必须一致,全部禁用swap;

master主机: [root@localhost ~]# hostnamectl set-hostname master node01主机: [root@localhost ~]# hostnamectl set-hostname node01 node02主机: [root@localhost ~]# hostnamectl set-hostname node02 //更改主机名 [root@localhost ~]# bash [root@master ~]# systemctl stop firewalld //关闭防火墙 [root@master ~]# systemctl disable firewalld [root@master ~]# setenforce 0 //禁用selinux [root@master ~]# iptables -F //清空iptables规则 [root@master ~]# iptables-save [root@master ~]# swapoff -a //禁用swap [root@master ~]# free -h //确认swap分区没有使用 total used free shared buff/cache available Mem: 1.8G 361M 861M 9.0M 600M 1.2G Swap: 0B 0B 0B [root@master ~]# vim /etc/fstab #/dev/mapper/cl-swap swap swap defaults 0 0 //此段加上注释

二)、配置免密登录、配置hosts域名解析

[root@master ~]# vim /etc/hosts //配置hosts文件用于域名解析 192.168.45.129 master 192.168.45.141 node01 192.168.45.142 node02 [root@master ~]# ssh-keygen -t rsa //开启无密码传送 //连续点3下回车键 [root@master ~]# ssh-copy-id root@node01 [root@master ~]# ssh-copy-id root@node02 [root@master ~]# scp /etc/hosts node01:/etc/hosts [root@master ~]# scp /etc/hosts node02:/etc/hosts

三)、打开iptables桥接及路由转发

[root@master ~]# vim /etc/sysctl.d/k8s.conf //编写以下两条命令 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 //开启iptables桥接功能 [root@master ~]# scp /etc/sysctl.d/k8s.conf node01:/etc/sysctl.d/k8s.conf //将更改的配置文件发送给node01和node02 [root@master ~]# scp /etc/sysctl.d/k8s.conf node02:/etc/sysctl.d/k8s.conf [root@node01 ~]# 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 //使内核加载br_netfilter模块 [root@master ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf //开启节点的路由转发功能 [root@master ~]# sysctl -p net.ipv4.ip_forward = 1 [root@master ~]# scp /etc/sysctl.conf node01:/etc/sysctl.conf //将更改的配置文件发送给node01和node02 [root@master ~]# scp /etc/sysctl.conf node02:/etc/sysctl.conf [root@node01 ~]# sysctl -p net.ipv4.ip_forward = 1 [root@node02 ~]# sysctl -p net.ipv4.ip_forward = 1

[root@master ~]# 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/rpm-package-key.gpg > EOF

[root@master ~]# scp /etc/yum.repos.d/kubernetes.repo node01:/etc/yum.repos.d/kubernetes.repo [root@master ~]# scp /etc/yum.repos.d/kubernetes.repo node02:/etc/yum.repos.d/kubernetes.repo //将yum文件发送到node01、node02服务器上 //以下操作需在三台docker主机上都要执行以下 [root@master ~]# yum repolist //查看配置的yum文件有没有可用的包 kubernetes Kubernetes 542 //这个数字不可以为0 [root@master ~]# yum makecache //制作yum元数据缓存

四、部署kubernetes群集

一、yum安装kubernetes所需的组件

[root@master ~]# yum -y install kubeadm-1.15.0-0 kubelet-1.15.0-0 kubectl-1.15.0-0 //master端下载所需组件 [root@node01 ~]# yum -y install kubeadm-1.15.0-0 kubelet-1.15.0-0 [root@node02 ~]# yum -y install kubeadm-1.15.0-0 kubelet-1.15.0-0 //node端下载所需组件

注:OK,准备工作做完,可以开始初始化,可是由于国内网络环境限制,我们不能直接从谷歌的镜像站下载镜像,这时,需要我们手工从docker镜像站下载镜像,然后重新命名,这里我已经下载好了,只需要导入相应的镜像即可这里用脚本来实现。k8s镜像 提取码:i13d

二、编写脚本,上传我提供的镜像

[root@master ~]# vim images.sh #/bin/bash for i in /root/images/* do docker load < $i done echo -e "\e[1;3m]导入完成\e[0m]" //编写完成后保存退出即可 [root@master ~]# scp images.sh node01:/root/images.sh [root@master ~]# scp images.sh node02:/root/images.sh //将编写完的脚本发给node01和node02 [root@master ~]# mkdir images //创建用于存放镜像的tar包 [root@master ~]# cd images/ [root@master images]# rz //上传我提供的镜像 [root@master images]# ls coredns-1-3-1.tar kube-apiserver-1-15.tar kube-proxy-1-15.tar myflannel-11-0.tar etcd-3-3-10.tar kube-controller-1-15.tar kube-scheduler-1-15.tar pause-3-1.tar [root@node01 images]# ls //node01和node02节点只需导入3个镜像即可。 kube-proxy-1-15.tar myflannel-11-0.tar pause-3-1.tar [root@master ~]# bash images.sh //执行脚本 //node01和node02也需要执行脚本生成容器

三、初始化kubernetes集群

[root@master ~]# 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 //这里指定的版本必须和前面yum安装的版本一致。指定的两个网络则是官方建议使用的网段 //如果执行上述命令后,返回CPU相关的报错信息,那么需要调大CPU的核心数 //初始化成功后,首先复制下面返回的这条命令,并妥善保存 //若初始化失败,修改完成之后需执行kubeadm reset进行重置群集 kubeadm join 192.168.45.129:6443 --token j2rtxl.1aai0w5vee2h5f2c \ --discovery-token-ca-cert-hash sha256:2214cfbf58c97fb65424ee0a8b2312a6cafc86531196a86806b309dabadf65ee //上面这条命令是用来其他节点加入到当前k8s群集中需要执行的 //一旦丢失,特别麻烦,并且只有24小时有效期,每次初始化群集后产生的都不一样 [root@master ~]# mkdir -p $HOME/.kube [root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config

四、配置master节点状态一)、查看节点信息

[root@master ~]# kubectl get nodes //查看节点信息 NAME STATUS ROLES AGE VERSION master NotReady master 15m v1.15.0 //从状态中可以看出是NotReady(没有准备好)

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

二)、添加网络组件(flannel)第一种方式:

[root@master ~]# kubectl apply -f ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml [root@master ~]# kubectl apply -f kube-flannel.yml //将配置文件下载完成后,对下载的配置文件执行相应的命令

五、将node01、node02加入kubernetes群集中

[root@node01 ~]# kubeadm join 192.168.45.129:6443 --token j2rtxl.1aai0w5vee2h5f2c --discovery-token-ca-cert-hash sha256:2214cfbf58c97fb65424ee0a8b2312a6cafc86531196a86806b309dabadf65ee [root@node02 ~]# kubeadm join 192.168.45.129:6443 --token j2rtxl.1aai0w5vee2h5f2c --discovery-token-ca-cert-hash sha256:2214cfbf58c97fb65424ee0a8b2312a6cafc86531196a86806b309dabadf65ee //masterr初始化kubernetes群集返回的命令复制,以便加入到master的kubernetes群集中

[root@master ~]# kubectl get nodes

六、部署后的优化操作一)、设置kubectl命令行工具自动补全功能

[root@k8s-master ~]# yum install -y bash-completion [root@k8s-master ~]# source /usr/share/bash-completion/bash_completion [root@k8s-master ~]# source <(kubectl completion bash) [root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc

二)、为了以后我们写yaml文件方便些,这里设置tab键空格个数

[root@master ~]# echo "set tabstop=2" >> .vimrc [root@master ~]# source .vimrc //设置tab键默认间距为两个空格,并使其生效

三)master节点确认Kubernetes集群没有问题

[root@master ~]# kubectl get pod --all-namespaces //查看pod资源,确保返回的信息都是running //不指定具体的名称空间,表示查看本节点所有的名称空间

或者

[root@master ~]# kubectl get pod -n kube-system //查看pod资源,确保返回的信息都是running //指定kubernetes集群的名称空间

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Kubernetes架构工作原理
下一篇:多数据源模式JPA整合sharding
相关文章

 发表评论

暂时没有评论,来抢沙发吧~