一、前言

本文讲述从零开始搭建k8s集群,均使用国内镜像,版本均统一,使用两个虚拟机,一个主节点,一个从节点,保证k8s一次搭建成功。

注意:Kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。

二、Centos最小化安装

安装K8S需要使用Centos7,每个机器至少2个处理器和2G,这是k8s官网是要求的。

2.1 vmware最小化安装centos7

vmware最小化安装centos7,下载好镜像,不断下一步,直到完成。

先到官网 https://www.centos.org/download/ 下载centos.iso,如下:

国内的,直接选阿里云镜像就好 http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/

具体安装可以参见 https://www.cnblogs.com/liuhui-xzz/p/10155511.html

其实没这么麻烦,只需要配置磁盘这个必选就好了,其他都不用配置,不断下一步,最好就安装好了。

2.2 配置静态IP

创建好的虚拟机 ping www.baidu.com 失败,需要配置好静态ip,才能连同外网。
输入 vi /etc/sysconfig/network-scripts/ifcfg-ens33 然后按照如下图编辑,最后 service network restart 保存即可

BOOTPROTO=static ONBOOT=yes DNS1=114.114.114.114 这三个是写死的,那么其他三个ip 子网掩码 网关是如何确定的呢?这个和本机的ip无关,只和vmware的虚拟网络编辑器有关。

vware的虚拟网络编辑器,需要配置子网掩码、子网ip、网关ip

首先是子网掩码,一般都是C类,配置为 255.255.255.0 ,没什么好说的,然后是子网ip,这个子网ip要受到子网掩码的限制,只有前面三个字节,最后一个字节为0,一般是 xxx.xxx.xxx.0,这里子网IP配置为192.168.100.0,然后再是网关(就是虚拟网络编辑器的ip),网关ip又受到子网ip的限制,前面三个字节需要和子网ip一样,表示是这个子网段内的ip,这里配置为192.168.100.2,其他可以配置为该子网内任意一个 192.168.100.1 - 192.168.100.127,如下图:

配置好虚拟网络编辑器之后,再来看静态ip的三个字段,NETMASK=255.255.255.0 没问题,c类都是这样配置,然后是网关ip GATEWAY,这里必须和虚拟网络编辑器的那个网关ip一致就是192.168.100.2,所以配置GATEWAY=192.168.100.2,然后就是自己的IPADDR了,要保证两点,在子网段内 且 不和网关ip及该子网段内其他ip冲突,在子网段内就是 192.168.100 开头,不和网关ip及该子网段内其他ip冲突,就是最后一个不能为 2 或者其他用过的,所以一个是 150 一个是151,即 192.168.100.150 和 192.168.100.151 。

配置静态ip之后,就可以用xshell连接并操作了,不用再使用vmware敲命令,也有yum命令,缺少什么都可以随时下载,比如最小安装没有wget命令,可以yum -y install wget。

因为我们的两个虚拟机需要作为K8S的两个节点,每个虚拟机处理数量一定要大于等于2,每个虚拟机内存数量一定要大于等于2G,vmware默认是每个虚拟机处理器数量是1,内存是1G,需要手动设置一下,

三、K8S集群搭建

从3.1到3.6,所有机器都执行
3.7和3.8只在主节点上执行
3.9的kube join只在从节点上执行(测试kubectl get nodes在主节点上执行,因为从节点没有.kube/,无法通过kubectl操作k8s集群)
3.10集群新建pod测试,在主节点上执行,因为从节点没有.kube/,无法通过kubectl操作k8s集群

3.1 更新yum

3台机器都需要执行

yum -y update
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp

3.2 安装Docker

在每一台机器上都安装好Docker,版本为18.09.0

01 安装必要的依赖

sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

02 设置docker仓库

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

然后设置一下阿里云镜像加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://orptaaqe.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload

03 安装docker

yum install -y docker-ce-18.09.0 docker-ce-cli-18.09.0 containerd.io

04 启动docker

sudo systemctl start docker && sudo systemctl enable docker

05 检查docker是否安装并启动好了

 ps -ef|grep docker

3.3 修改hosts文件

01 机器192.168.100.150执行两句

sudo hostnamectl set-hostname m
vi /etc/hosts
192.168.100.150 m
192.168.100.151 w1

02 机器192.168.100.151执行两句

sudo hostnamectl set-hostname w1
vi /etc/hosts
192.168.100.150 m
192.168.100.151 w1

03 每天机器上都要测试

ping m
ping w1

每个步骤配置完成之后,都要局部测试,这样才不会出问题

3.4 系统基础前提配置

每个机器上都要执行(机器192.168.100.150 和 机器192.168.100.151),如下:

# (1)关闭防火墙
systemctl stop firewalld && systemctl disable firewalld # (2)关闭selinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # (3)关闭swap 且 写入到 /etc/fstab 文件中,保证重启机器也生效
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab # (4)配置iptables的ACCEPT规则
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT # (5)设置系统参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF sysctl --system

3.5 安装 kubeadm, kubelet and kubectl

每个机器上都要执行(机器192.168.100.150 和 机器192.168.100.151),如下:

(1)配置yum源

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

(2)安装kubeadm&kubelet&kubectl

yum install -y kubectl-1.14.0-0
yum install -y kubelet-1.14.0-0
yum install -y kubeadm-1.14.0-0

这三个东西一定要保证版本统一,一定要安装这个安装顺序来完成

因为kubeadm依赖kubelet,如果先安装kubeadm,则kubelet的1.23版本就会被安装上去,然后再执行 yum install -y kubelet-1.14.0-0 会安装不上去,然后版本不统一,主节点初始化init报错

这才是正确的

及时测试:

kubectl version
kubelet --version
kubeadm version

版本必须都是 1.4.0,如果版本错了要删除

yum -y remove kubelet
yum -y remove kubectl
yum -y remove kubeadm

(3) docker和k8s设置同一个cgroup

# 编辑docker的daemon.json文件,每个节点都要执行
vi /etc/docker/daemon.json
"exec-opts": ["native.cgroupdriver=systemd"], systemctl restart docker # kubelet,这边如果发现输出directory not exist,也说明是没问题的,大家继续往下进行即可
sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf systemctl enable kubelet && systemctl start kubelet

3.6 配置国内镜像

(1) 创建kubeadm.sh脚本,用于拉取镜像/打tag/删除原有镜像

#!/bin/bash

set -e

KUBE_VERSION=v1.14.0
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.10
CORE_DNS_VERSION=1.3.1 GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION}) for imageName in ${images[@]} ; do
docker pull $ALIYUN_URL/$imageName
docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName
docker rmi $ALIYUN_URL/$imageName
done

(2) 运行脚本和查看镜像

# 运行脚本
sh ./kubeadm.sh # 查看镜像
docker images

至此,上面的3.1到3.6是每个节点都要执行的,就是机器 192.168.100.150 和 192.168.100.151 都要同时执行的,在Xshell里面,通过

3.7 kube init初始化master

到此为止,两个机器 192.168.100.150 和 192.168.100.151 还需要没有主次之分,还没有说哪个是k8s的主节点,现在 3.7 这个步骤只需要在 192.168.100.150 节点执行,让这个机器成为k8s主节点。

(2)初始化master节点

kubeadm init --kubernetes-version=1.14.0 \
--apiserver-advertise-address=192.168.100.150 --pod-network-cidr=10.244.0.0/16

在 192.168.100.150 机器上执行,然后这个 --apiserver-advertise-address=192.168.100.150 这样写

会得到一句

kubeadm join 192.168.100.150:6443 --token 7oahxf.bk0rywevgu0xjouy
–discovery-token-ca-cert-hash sha256:4f84a48cc41343848d0b2f807c38937bc96d3d43e821f06b0c143a5282a38204

一定要复制粘贴出来,下一个步骤在 192.168.100.151 机器上执行这句。

初始化完成执行后,继续只在 主节点 上执行,这三句,如下:

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

注意:我们所说的只有主节点才能通过 kubectl 命令操作k8s集群是因为,只有主节点上才完成这三步操作,才有 .kube 目录,如果从节点上也完成了这三句,也有 .kube 目录,也是可以通过 kubectl 命令操作k8s集群的。

(4) 测试:验证pod和健康检查(这两句也是只在master节点上执行)

# 验证pod
kubectl get pods -n kube-system
# 健康检查(不要怀疑,就是healthz)
curl -k https://localhost:6443/healthz

3.8 部署calico网络插件

k8s中,网络插件是为了k8s集群内部通信,所以必须安装一个网络插件,有很多选择,这里选择calico,同样在master节点上操作

# 在k8s中安装calico(这条命令很快的)
kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml # 确认一下calico是否安装成功 -w可以实时变化(看到calico都好了表示网络插件好了)
kubectl get pods --all-namespaces -w

测试验证是否安装成功,这里的calico两个显示Running就表示安装成功了。

从3.1到3.6,所有机器都执行,3.7和3.8只在主节点上执行,接下来的3.9的kube join只在从节点上执行(测试kubectl get nodes在主节点上执行,因为从节点没有.kube/,无法通过kubectl操作k8s集群)

3.9 kube join

(1) 在从节点上执行kube join命令,如下

kubeadm join 192.168.100.150:6443 --token 7oahxf.bk0rywevgu0xjouy \
--discovery-token-ca-cert-hash sha256:4f84a48cc41343848d0b2f807c38937bc96d3d43e821f06b0c143a5282a38204

记得保存初始化master节点的最后打印信息,注意这边大家要自己的,下面我的只是一个参考

(2)在master节点上检查集群信息(node的正常状态是ready,pod的正常状态是running)

kubectl get nodes

当每个节点都是Ready,表示完成。

3.10 新建Pod测试整个集群

(1)定义pod.yml文件,比如pod_nginx_rs.yaml

cat > pod_nginx_rs.yaml <<EOF
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx
labels:
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
name: nginx
labels:
tier: frontend
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
EOF

(2)根据pod_nginx_rs.yml文件创建pod

kubectl apply -f pod_nginx_rs.yaml

(3)查看pod

kubectl get pods
kubectl get pods -o wide
kubectl describe pod nginx

(4)感受通过rs将pod扩容

kubectl scale rs nginx --replicas=5
kubectl get pods -o wide

(5)删除pod

kubectl delete -f pod_nginx_rs.yaml

四、尾声

从零开始搭建k8s集群,完成了。

天天打码,天天进步!!

Kubernetes_从零开始搭建k8s集群(亲测可用)的更多相关文章

  1. 安装k8s集群(亲测)

    先安装一台虚拟机,然后进行克隆,因为前面的步骤都是一样的,具体代码如下: Last login: Mon Nov 25 00:40:34 2019 from 192.168.180.1 ##安装依赖包 ...

  2. kubeadm 搭建 K8S集群

    kubeadm是K8s官方推荐的快速搭建K8s集群的方法. 环境: Ubuntu 16.04 1 安装docker Install Docker from Ubuntu’s repositories: ...

  3. kubeadm搭建K8s集群及Pod初体验

    基于Kubeadm 搭建K8s集群: 通过上一篇博客,我们已经基本了解了 k8s 的基本概念,也许你现在还是有些模糊,说真的我也是很模糊的.只有不断地操作去熟练,强化自己对他的认知,才能提升境界. 我 ...

  4. 教你用multipass快速搭建k8s集群

    目录 前言 一.multipass快速入门 安装 使用 二.使用multipass搭建k8s集群 创建3台虚拟机 安装master节点 安装node节点 测试k8s集群 三.其他问题 不能拉取镜像:报 ...

  5. K8S集群Master高可用实践

    K8S集群Master高可用实践    https://blog.51cto.com/ylw6006/2164981 本文将在前文基础上介绍k8s集群的高可用实践,一般来讲,k8s集群高可用主要包含以 ...

  6. 搭建K8S集群

    一.前言 我们将现有的虚拟机称之为Node1,用作主节点.为了减少工作量,在Node1安装Kubernetes后,我们利用VirtualBox的虚拟机复制功能,复制出两个完全一样的虚拟机作为工作节点. ...

  7. 1 搭建K8s集群

    官网:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing ...

  8. Rancher 下图形界面 搭建 K8S 集群

    首先我们准备4台 2核3G 的 centos 7 温馨提示:先安装好一台 CentOS 的虚拟机,并且安装好 docker,永久关闭防火墙. 再这个基础上我们分别克隆出四台 Rancher.K8S1. ...

  9. 从0到1搭建k8s集群系列1:安装虚拟机及docker

    前言 本系列文章记录了本人学习k8s集群搭建的过程,从k8s基本组件的安装.到部署mysql服务到k8s集群.部署web项目到k8s集群以及安装可视化界面管理工具kuboard. 因为k8s的组件安装 ...

  10. CentOS7 使用 kubeadm 搭建 k8s 集群

    一 安装Docker-CE 前言 Docker 使用越来越多,安装也很简单,本次记录一下基本的步骤. Docker 目前支持 CentOS 7 及以后的版本,内核要求至少为 3.10. Docker ...

随机推荐

  1. 第十三章 k8s的GUI资源管理插件--dashboard

    1.部署Kubernetes-dashboard 1.1 准备dashboard镜像 在10.4.7.200上操作 [root@hdss7-200 ~]# docker pull k8scn/kube ...

  2. flex常用布局

    公共样式: <style> * { margin: 0; padding: 0; } .has-flex { display: flex; } </style> 垂直居中 子元 ...

  3. mysql8.0及以上修改Root密码

    ALTER user 'root'@'localhost' IDENTIFIED BY 'Cliu123#' //1.不需要flush privileges来刷新权限. //2.密码要包含大写字母,小 ...

  4. .Net之接口小知识

    目的 通过一个简单的项目,在原来的文章基础上完善一下常用的几种WebApi编写方式以及请求方式,一方面是用于给我一个前端朋友用来学习调用接口,另一方面让我测试HttpClient的一些效果. 本文示例 ...

  5. Docker安装Redis并使用Another Redis Desktop Manager连接

    Redis简单介绍 Redis全称是Remote DIctionary Service,即远程字典服务.Redis 是一个使用C语言编写的.开源的(遵守 BSD 协议).高性能的.支持网络.可基于内存 ...

  6. Windows服务器限制进程CPU使用率

    在Windows server 2012 之前的服务系统 2008和2008 R2中有系统资源管理器System Resource Manager可以管理系统的CPU和内存使用情况.特别对于一些自己开 ...

  7. Java SE 四大内部类

    内部类 1.成员内部类 调用成员内部类 //在外面的类的最后,写一个方法,调用成员内部类(创建对象,在访问) class Outer08{ class Inner08{ //成员内部类 public ...

  8. 题解 P2471 【[SCOI2007]降雨量】

    原题传送门 前置芝士 离散化 ST表和RMQ问题 二分 正文 首先我们来分析一下题意. 题目会给出两个大小为 \(n\) 的数组,\(y\) 和 \(r\) ,其中 \(y_i\) 表示第 \(i\) ...

  9. Centos7搭建 KVM 环境

    注意:使用KVM管理虚拟机分命令行和图形化界面两种方式,这里最后一步安装的工具是图形化管理工具 安装前准备 验证CPU是否支持KVM 如果结果中有vmx(Intel)或svm(AMD)字样,就说明CP ...

  10. GitLab 之 Git LFS 大文件存储的配置

    转载自:https://cloud.tencent.com/developer/article/1010589 1.Git LFS 介绍 Git 大文件存储(Large File Storage,简称 ...