博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于kubeadm方式快速搭建K8s集群
阅读量:4118 次
发布时间:2019-05-25

本文共 4635 字,大约阅读时间需要 15 分钟。

1. 部署环境

(1)安装要求

  • 一台或者多台虚拟机,操作系统CentOS7.x-86_64或者更高版本;
  • 硬件配置:2GB或者更多RAM,2个CPU或者更多CPU,硬盘30G+;
  • 可以访问外网,以便拉取镜像,如果服务器不能上网,需提前下载镜
    并导入到节点;
  • 禁用swap分区

(2)环境规划

在这里插入图片描述

角色 IP
master 192.168.0.1
node 192.168.0.2
node 192.168.0.3

2. Kubernetes部署

2.1、kubeadm部署

kubeadm是官方社区推出的一个用于快速部署kubernates集群工具,该工具通过两条命令即可完成一个kubernetes集群的部署:

(1)创建一个Master节点 kubeadm init
(2)将Node节点加入到当前集群中 $kubeadm join <Master节点的IP和端口>,详细步骤如下:

2.1.1、虚拟机系统配置

(1)关闭防火墙

systemctl stop firewalld    #临时关闭防火墙  systemctl disable firewalld  #永久关闭防火墙  #辅助命令: systemctl status firewalld 查看防火墙状态

(2)关闭selinux

setenforce 0                   #临时关闭 sed -i 's/enforcing/disabled/' /etc/selinux/config #永久关闭 #辅助命令: sestatus            #查看SElinux状态

(3)关闭swap

swapoff -a   #临时关闭 sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭 #辅助命令   sfdisk -l  显示分区信息

(4)设置主机名称和hosts配置

hostnamectl set-hostname k8s-master hostnamectl set-hostname k8s-node1 hostnamectl set-hostname k8s-node2

并在master节点添加hosts

cat >> /etc/hosts << EOF 192.168.0.1 k8s-master 192.168.0.2 k8s-node1 192.168.0.3 k8s-node2 EOF

(5)将桥接的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  #让配置生效

(6)时间同步

yum install ntpdate -y ntpdate time.windows.com   #校时服务器,可是其他服务器 #辅助命令:date 查看系统时间

2.1.2、在所有节点安装Docker/kubeadm/kubelet

Kubernetes模式CRI(容器运行时)为Docker,因此必须先安装Docker环境。

(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.09.9-3.el7 systemctl enable docker && systemctl start docker #辅助命令:docker -v  查看docker版本 #配置镜像仓库地址 cat > /etc/docker/daemon.json << EOF {
"registry-mirrors":["https://mirrors.aliyun.com"] } EOF

(2)添加k8s的yum软件源(此处选择阿里云)

cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF

在这里插入图片描述

(3)安装kubeadm,kubelet和kubectl
由于k8s版本更新频繁,这里指定版本号部署:

yum install -y kubelet-1.18.20 kubeadm-1.18.20 kubectl-1.18.20 systemctl enable kubelet #辅助命令: kubelet version 查看安装版本 #辅助命令: kubeadm version 查看安装版本 #辅助命令: kubectl version 查看安装版本

(4)部署Kubernetes Master节点

在192.168.0.1(Master),由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址,执行命令:

#apiserver-advertise-address 对应本机ip地址 #cidr  和当前网段不冲突即可 kubeadm init \ --apiserver-advertise-address=192.168.0.1 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.18.20 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16

拉取完后的镜像列表:

在这里插入图片描述
master部署成功输出如下:
注意:执行成功后的kubeadm join命令,拷贝到Node节点执行;
在这里插入图片描述
使用kubectl命令工具,在master节点按顺序执行如下命令:

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config  kubectl get nodes  #查看k8s集群节点

查看k8s集群节点,显示如下:

在这里插入图片描述
(5)加入Kubernetes Node节点
在(Node)执行
向集群添加新节点,执行在kubeadm init成功输出的kubeadm join命令

kubeadm join 192.168.0.135:6443 --token uvuy75.duzcnpu8an98hwbh \    --discovery-token-ca-cert-hash sha256:e12720ed2c135cf547c479d4e5ea33a36c97c63e1326ec7140232227edf2e32a

默认token的有效期为24h,当token过期后,该token将不可用,这时就需要重新创建token,操作如下:

kubeadm token create --print-join-command #仅在集群token过期后生成,然后node再加入集群

执行命令成功输出如下:

在这里插入图片描述
再次查看k8s集群节点,因缺少网络组建,显示如下:
在这里插入图片描述
(6)部署CNI网络插件
为了要让 Kubernetes Cluster 能够正常工作,必须安装 Pod 网络,否则 Pod 之间无法通信。Kubernetes 支持多种网络方案,这里我们使用 flannel,在Master节点执行即可。

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

方法1: 默认镜像地址无法访问,通过sed命令修改为docker hub镜像仓库,注意仓库为国外仓库(目前被墙挡住),执行命令如下:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml  kubectl get pods -n kube-system   #检查 Pod 的状态,可能存在ImagePullError(镜像拉取失败)

在这里插入图片描述

方法2(建议):

a. 通过https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 链接将kube-flannel.yml文件下载到本地,并拷贝到Linux环境目录/opt/k8s.

b. 从阿里云拉取flannel镜像,当前最新版本docker pull registry.cn-hangzhou.aliyuncs.com/k8sos/flannel:v0.13.1-rc2
c. 将kube-flannel.yml文件中的镜像名称(image: quay.io/coreos/flannel:vxx)全部替换为:registry.cn-hangzhou.aliyuncs.com/k8sos/flannel:v0.13.1-rc2
d. 重新应用kube-flannel.yaml,执行命令: kubectl apply -f /opt/k8s/kube-flannel.yml
c. 检查Pod状态,执行命令:kubectl get pods -n kube-system
部署成功后运行如下:
在这里插入图片描述

(7)测试Kubernetes集群

在Kubernetes集群中创建一个Pod,验证是否正常运行:

kubectl create deployment nginx --image=nginx  #自动联网下载nginx镜像kubectl expose deployment nginx --port=80 --type=NodePort #对外暴露80映射端口kubectl get pod,svc

在这里插入图片描述

访问地址:http://NodeIP:Port(此处为32445),或者通过命令curl GET http://192.168.0.1:32445访问,输出nginx默认页面如下:
在这里插入图片描述
(8)其他常用命令

kubectl get nodes kubectl get pods

转载地址:http://fjcpi.baihongyu.com/

你可能感兴趣的文章
vim常见操作
查看>>
linux性能监控工具汇总
查看>>
c++ new operator和operator new,delete operator和operator delete
查看>>
linux 信号机制
查看>>
linux 软件管理方式
查看>>
TCP有效带宽
查看>>
linux free命令输出详解
查看>>
[转]C++ 虚函数表解析
查看>>
C++ 对象的内存布局(上)
查看>>
C++ 对象的内存布局(下)
查看>>
浅谈多态基类析构函数声明为虚函数
查看>>
Android SDK Manager 无法更新问题解决
查看>>
python文件操作
查看>>
Java之线程
查看>>
Java之文件IO
查看>>
面试的一道机试题: 排序 难度(**)
查看>>
Windows编译OpenSSL
查看>>
vector动态二维数组
查看>>
谈谈Visual Studio中的清单
查看>>
Magento初探
查看>>