centos7部署k8s_怎么在自己电脑上搭建网站

centos7部署k8s_怎么在自己电脑上搭建网站学习K8S时,常常需要自己搭建环境,本人将centOS-7上搭建K8S的过程进行做如下的记录,以方便自己后续环境的搭建和指导其他人搭建环境作为参考资料,本章节主要介绍如何搭建kubernetes的集群环境集群环境搭建集群类型kubernetes集群大体上分为两类:一主多从和多主多从。一主多从:一台Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境多主多从:多台Master节点和多台Node节点,搭建麻烦,安全性高,适合用于生产环境说明:为了测试简单,本次搭建

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

学习K8S时,常常需要自己搭建环境,本人将centOS-7上搭建K8S的过程进行做如下的记录,以方便自己后续环境的搭建和指导其他人搭建环境作为参考资料,本章节主要介绍如何搭建kubernetes的集群环境

集群环境搭建

集群类型

kubernetes集群大体上分为两类:一主多从多主多从

  • 一主多从:一台Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境
  • 多主多从:多台Master节点和多台Node节点,搭建麻烦,安全性高,适合用于生产环境

说明:为了测试简单,本次搭建的是 一主两从 类型的集群

安装方式

kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包

  • minikube:一个用于快速搭建单节点kubernetes的工具
  • kubeadm:一个用于快速搭建kubernetes集群的工具
  • 二进制包 :从官网下载每个组件的二进制包,依次去安装,此方式对于理解kubernetes组件更加有效

说明:现在需要安装kubernetes的集群环境,但是又不想过于麻烦,所以选择使用kubeadm方式

主机规划

作用 IP地址 操作系统 配置
Master 192.168.1.100 Centos7.9 基础设施服务器 2颗CPU 2G内存 50G硬盘
Node1 192.168.1.101 Centos7.9 基础设施服务器 2颗CPU 2G内存 50G硬盘
Node2 192.168.1.102 Centos7.9 基础设施服务器 2颗CPU 2G内存 50G硬盘
Node3 192.168.1.103 Centos7.9 基础设施服务器 2颗CPU 2G内存 50G硬盘

环境搭建

​ 本次环境搭建需要安装三台Centos服务器(一主二从),然后在每台服务器中分别安装docker(18.06.3),kubeadm(1.17.4)、kubelet(1.17.4)、kubectl(1.17.4)程序。

主机安装

安装虚拟机过程中注意下面选项的设置:

  • 操作系统环境:CPU(2C) 内存(2G) 硬盘(50G)

  • 语言选择:中文简体

  • 软件选择:基础设施服务器

  • 分区选择:自动分区

  • 网络配置:按照下面配置网路地址信息

网络地址:192.168.1.100  (每台主机都不一样  分别为100101102,103)
子网掩码:255.255.255.0
默认网关:192.168.1.99
DNS:114.114.114.114
  • 主机名设置:按照下面信息设置主机名

  • master节点: master
    node节点: node1
    node节点: node2
    node节点: node3

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wiWbiM7X-1650165608530)(assets/image-20200505214156148.png)]

环境初始化

  1. 检查操作系统的版本

#此方式下安装kubernetes集群要求Centos版本要在7.5或之上(否则存在node节点无法加入master的情况)
在这里插入图片描述

2) 主机名解析

为了方便后面集群节点间的直接调用,在这配置一下主机名解析,企业中推荐使用内部DNS服务器

# 主机名成解析 编辑三台服务器的/etc/hosts文件,添加下面内容
192.168.1.100  master
192.168.1.101  node1
192.168.1.102  node2
192.168.1.103  node3

修改系统的DNS(不然在拉取镜像中存在报错):
vim /etc/resolv.conf
内容改为:
#Generated by NetworkManager
search localdomain
nameserver 114.114.114.114
在这里插入图片描述

3) 时间同步

kubernetes要求集群中的节点时间必须精确一致,这里直接使用chronyd服务从网络同步时间。

企业中建议配置内部的时间同步服务器

# 启动chronyd服务
[root@master ~]# systemctl start chronyd
# 设置chronyd服务开机自启
[root@master ~]# systemctl enable chronyd
# chronyd服务启动稍等几秒钟,就可以使用date命令验证时间了
[root@master ~]# date

在这里插入图片描述

4) 禁用iptables和firewalld服务

kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

# 1 关闭firewalld服务
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
# 2 关闭iptables服务
[root@master ~]# systemctl stop iptables
[root@master ~]# systemctl disable iptables

在这里插入图片描述

5) 禁用selinux

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disabled
# 注意修改完毕之后需要重启linux服务
SELINUX=disabled

在这里插入图片描述

6) 禁用swap分区

swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用

启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备

但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

# 编辑分区配置文件/etc/fstab,注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务
 UUID=455cc753-7a60-4c17-a424-7741728c44a1 /boot    xfs     defaults        0 0
 /dev/mapper/centos-home /home                      xfs     defaults        0 0
# /dev/mapper/centos-swap swap swap defaults 0 0

在这里插入图片描述

7)修改linux的内核参数

# 修改linux的内核参数,添加网桥过滤和地址转发功能
# 编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

# 重新加载配置
[root@master ~]# sysctl -p

# 加载网桥过滤模块
[root@master ~]# modprobe br_netfilter

# 查看网桥过滤模块是否加载成功
[root@master ~]# lsmod | grep br_netfilter

在这里插入图片描述

8)配置ipvs功能

在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的

两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块

#1 安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadmin -y
在这里插入图片描述
在这里插入图片描述

#2 添加需要加载的模块写入脚本文件
[root@master ~]# cat < /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe – ip_vs
modprobe – ip_vs_rr
modprobe – ip_vs_wrr
modprobe – ip_vs_sh
modprobe – nf_conntrack_ipv4
EOF
在这里插入图片描述

#3 为脚本文件添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules

#4 执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules

#5 查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
在这里插入图片描述

9) 重启服务器

上面步骤完成之后,需要重新启动linux系统

[root@master ~]# reboot

安装docker

# 1 切换镜像源
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 2 查看当前镜像源中支持的docker版本
[root@master ~]# yum list docker-ce --showduplicates

# 3 安装特定版本的docker-ce
# 必须指定--setopt=obsoletes=0,否则yum会自动安装更高版本
[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y

# 4 添加一个配置文件
# Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgroupfs
[root@master ~]# mkdir /etc/docker
[root@master ~]# cat <<EOF > /etc/docker/daemon.json
{ 
   
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF

# 5 启动docker
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker

# 6 检查docker状态和版本
[root@master ~]# docker version

在这里插入图片描述

安装kubernetes组件

# 由于kubernetes的镜像源在国外,速度比较慢,这里切换成国内的镜像源
# 编辑/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

# 安装kubeadm、kubelet和kubectl
[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y

# 配置kubelet的cgroup
# 编辑/etc/sysconfig/kubelet,添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

# 4 设置kubelet开机自启
[root@master ~]# systemctl enable kubelet

在这里插入图片描述
在这里插入图片描述
修改配置文件如下
在这里插入图片描述

准备集群镜像

在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
[root@master ~]# kubeadm config images list
在这里插入图片描述
下载镜像
此镜像在kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替代方案
images=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
在这里插入图片描述
for imageName in i m a g e s [ @ ] ; d o d o c k e r p u l l r e g i s t r y . c n − h a n g z h o u . a l i y u n c s . c o m / g o o g l e c o n t a i n e r s / {images[@]} ; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/ images[@];dodockerpullregistry.cnhangzhou.aliyuncs.com/googlecontainers/imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/ i m a g e N a m e k 8 s . g c r . i o / imageName k8s.gcr.io/ imageNamek8s.gcr.io/imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
在这里插入图片描述
单个组件的操作可以用下面这个方法:

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.17.4
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.17.4 k8s.gcr.io/kube-apiserver:v1.17.4
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.17.4

集群初始化

下面开始对集群进行初始化,并将node节点加入到集群中

下面的操作只需要在master节点上执行即可

#创建集群
[root@master ~]# kubeadm init
–kubernetes-version=v1.17.4
–pod-network-cidr=10.244.0.0/16
–service-cidr=10.96.0.0/12
–apiserver-advertise-address=192.168.1.100 (master的IP地址,需要修改)
在这里插入图片描述
得到的结果如下:
在这里插入图片描述

#创建必要文件
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config
在这里插入图片描述

下面的操作只需要在node节点上执行即可

#将node节点加入集群(每个master的节点的操作不一致)
[root@master ~]# kubeadm join 192.168.109.100:6443 \
–token 8507uc.o0knircuri8etnw2
–discovery-token-ca-cert-hash
sha256:acc37967fb5b0acf39d7598f8a439cc7dc88f439a3f4d0c9cae88e7901b9d3f
需要加入到master节点上的node节点都需要执行以下的操作:
在这里插入图片描述

#查看集群状态 此时的集群状态为NotReady,这是因为还没有配置网络插件
在这里插入图片描述

安装网络插件

kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可,本次选择flannel

下面操作依旧只在master节点执行即可,插件使用的是DaemonSet的控制器,它会在每个节点上都运行

#获取fannel的配置文件
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#修改文件中quay.io仓库为quay-mirror.qiniu.com

#使用配置文件启动fannel
[root@master ~]# kubectl apply -f kube-flannel.yml
在这里插入图片描述
#稍等片刻,再次查看集群节点的状态
[root@master ~]# kubectl get nodes
以下是过程变化
在这里插入图片描述
结果显示如下:
在这里插入图片描述

至此,kubernetes的集群环境搭建完成

部署Nginx进行测试:

[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES    AGE    VERSION
master   Ready      master   120m   v1.17.4
node1    Ready      <none>   115m   v1.17.4
node2    Ready      <none>   113m   v1.17.4
node3    NotReady   <none>   112m   v1.17.4
[root@master ~]# kubectl create deployment nginx --image=nginx:1.14-alpine
deployment.apps/nginx created
[root@master ~]# kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6867cdf567-5rbrj   1/1     Running   0          26s
[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
[root@master ~]# kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6867cdf567-5rbrj   1/1     Running   0          118s

在这里插入图片描述

[root@master ~]# kubectl get service 查看Nginx暴露的端口号
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        125m
nginx        NodePort    10.110.254.217   <none>        80:**30427**/TCP   69s  查看Nginx暴露的端口号

在浏览器通过master的IP+PORT(http://192.168.1.100:30427/)的端口,进行访问nginx
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168436.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm如何创建py文件_pycharm输入不了

    pycharm如何创建py文件_pycharm输入不了PyCharm是一款很好用的编写Python工程的IDE,用PyCharm创建一个Python文件或者向工程添加一个.py文件时,为了更好的使所编写的代码在各操作环境更好的运行,我们往往需要在.py文件中添加头文件标注相关信息。例如:打开PyCharm程序,根据菜单栏中按照如下进入设置:File->settings->Editor->FileandCodeTem…

  • a53a55处理器性能区别(a55和a53cpu参数)

    为了完善自家的5G产品线,近期OPPO推出了多款千元机,其中就有不少A系列的5G千元产品。而OPPOA55就是oppo新推出的一款千元5G新品。那么这款OPPOA55和A53的区别有哪些呢?下面,我们就通过OPPOA55和A53参数对比,来告诉大家哪款更值得入手。OPPOA55和A53的区别有哪些?先来看看外观方面,OPPOA55采用了一块6.5英寸LCD屏幕,水滴屏设计,分辨率为1600×7…

  • linux阻塞与非阻塞(connect连接超时)

    非阻塞connect详情介绍可以参见文章:https://blog.csdn.net/qq_41453285/article/details/89890429一、非阻塞connect概述man手册connect的man手册有如下一段内容:EINPROGRESSThesocketisnonblockingandtheconnectioncannotbe…

  • ffplay播放器原理剖析

    ffplay播放器原理剖析****************************************************************************** ffplay系列博客:                                           ** ffplay播放器原理剖析    …

  • 菜鸟的mybatis实战教程

    菜鸟的mybatis实战教程菜鸟的mybatis实战教程说明一、mybatis简介二、mybatis简单入门(1)数据库创建(2)创建springboot项目(3)增删改查操作(4)总结说明之前学习了mybatis之后没有做记录,在前几天做一个题库系统时,刚好要用到mybatis,因为之前做东西时用的jpa,mybatis没怎么去用,导致有些知识点想不起来,在使用mybatis出现了一些低级的错误,现将mybatis的学习笔记记录在这里,以便日后查看,本文会持续更新,不断地扩充本文仅为记录学习轨迹,如有侵权,联系删除一、myb

  • datagrip 2021 激活码【2021最新】

    (datagrip 2021 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~ML…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号