K8S快速搭建教程

1、K8S知识介绍

Kubernetes(通常简写为K8s)是一个用于自动化容器化应用程序部署、扩展和管理的开源平台。它提供了一种容器编排的解决方案,可以帮助您管理和调度大规模的容器化应用程序。

Kubernetes 的设计目标是简化应用程序的部署、扩展和管理。它具有以下主要功能:

  • 自动化容器部署:Kubernetes 可以帮助您轻松地将容器化的应用程序部署到集群中,并确保它们在不同节点上正确运行。
  • 负载均衡和服务发现:Kubernetes 提供负载均衡机制,使您可以将流量分发到运行相同应用程序的多个容器之间。它还提供了服务发现功能,以便其他应用程序可以自动找到和访问这些服务。
  • 自动扩展和健康检查:Kubernetes 可以根据应用程序的负载情况自动扩展或收缩容器实例。它会持续监测应用程序的健康状态,并在需要时重新启动或替换失败的容器。
  • 存储编排:Kubernetes 提供了对常见存储系统的支持,可以将存储卷附加到容器,并确保数据的持久性。
  • 配置和密钥管理:Kubernetes 具有集中化的配置管理功能,可以将配置文件和敏感信息(如密码和API密钥)存储在安全的方式中,并自动将其传递给应用程序。
  • 跨多个环境的可移植性:Kubernetes 可以在各种环境中运行,包括本地环境、公共云、私有云和混合云等。这使得应用程序的迁移和跨平台部署更加容易。

通过使用 Kubernetes,您可以更轻松地管理和扩展容器化应用程序,提高应用程序的可用性和弹性,并实现高效的资源利用。它已成为一个广泛使用的容器编排平台,在云原生应用程序的开发和部署中扮演着重要角色。

2、K8S的安装

2.1 安装要求

  • 一台或多台机器,操作系统 CentOS7.x-86_x64
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
  • 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
  • 禁止swap分区

2.2 准备环境

角色 IP
master 192.168.75.132
node1 192.168.75.133
node2 192.168.75.134
# 关闭防火墙(云服务器的就开启相关端口即可)   master & node
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux(SELinux对容器内部的访问权限进行严格控制,可能会导致一些容器无法正常运行)
#master & node
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

# 关闭swap(保证性能和可靠性)   master & node  永久重启虚拟机
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

# 根据规划设置主机名
#(帮助 Kubernetes 正确识别和管理集群中的节点,并确保各种功能和配置的正常运行,必须唯一)
#master & node
hostnamectl set-hostname <hostname>
#hostnamectl set-hostname  master
#hostnamectl set-hostname  node1
#hostnamectl set-hostname  node2

# 在master的/etc/hosts添加
192.168.75.132 k8smaster
192.168.75.133 k8snode1
192.168.75.134 k8snode2

# 将桥接的IPv4流量传递到iptables的链,为了支持 Kubernetes 中容器间网络通信和网络过滤功能而设置的。  
#修改/etc/sysctl.d/k8s.conf文件   master & node
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

# 生效
sysctl --system  

# 时间同步   master & node
yum install ntpdate -y
ntpdate time.windows.com

3、安装Kubeadm、Kubelet和Kubectl

需另外安装docker,请自行安装

3.1 添加阿里云Yum软件源

#创建/etc/yum.repos.d/kubernetes.repo文件
#通过执行该命令,系统会将这个仓库源添加到 YUM 的配置中,从而可以使用 YUM 命令来安装、更新和管理 Kubernetes 相关的软件包。
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

3.2 Kubeadm、Kubelet、Kubectl的介绍

kubeadm、kubelet 和 kubectl 是 Kubernetes 中的三个不同组件,各自承担着不同的角色和功能:

Kubeadm:

  • kubeadm 是 Kubernetes 的一个命令行工具,用于在一个集群中初始化和管理主节点(Master Node)。
  • 它提供了一种简化的方式来设置 Kubernetes 集群,并帮助用户完成初始配置、生成证书和密钥等操作。
  • kubeadm可以协助用户通过指定参数来创建集群、添加或删除工作节点(Worker Node)。

Kubelet:

  • kubelet 是运行在每个工作节点上的代理服务。它负责管理工作节点上的容器,并与主节点通信以确保集群的正常运行。
  • kubelet 会接收来自主节点的指令,根据指令启动、停止、监控容器的生命周期,并将容器状态报告给主节点。
  • kubelet 还负责监控工作节点的资源使用情况,并与主节点协商资源分配。

Kubectl:

  • kubectl 是 Kubernetes 的命令行客户端工具,用于与 Kubernetes 集群进行交互。
  • 用户可以使用 kubectl 来执行各种操作,如创建、删除和管理集群中的应用程序、容器和资源。
  • kubectl 提供了丰富的命令和选项,使用户能够轻松地管理集群、查看状态、进行调试和监控等。

总结:

  • kubeadm 用于初始化和管理主节点,帮助构建 Kubernetes 集群。
  • kubelet 是运行在工作节点上的代理服务,负责管理容器和节点的通信。
  • kubectl 是与 Kubernetes 集群交互的命令行客户端工具,用于管理和操作集群中的资源。

3.3 安装Kubeadm、Kubelet和Kubectl

3.3.1 执行版本号部署
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
#系统启动时自动启用 Kubernetes
systemctl enable kubelet
3.3.2 部署Kubernetes Master
#Master节点(192.168.75.132)使用
#在 kubeadm 初始话集群成功后会返回join 命令,里面有 token,discovery-token-ca-cert-hash等参数,需要记下来
kubeadm init \
  #指定集群中其他节点访问该节点的地址
  --apiserver-advertise-address=192.168.75.132 \
  #指定使用的镜像仓库,国内阿里云仓库的好一点
  --image-repository registry.aliyuncs.com/google_containers \
  #指定k8s的版本
  --kubernetes-version v1.18.0 \
  #指定服务网络的 IP 范围。
  --service-cidr=10.96.0.0/12 \
  #指定 Pod 网络的 IP 范围
  --pod-network-cidr=10.244.0.0/16

Kubectl的使用准备

mkdir -p $HOME/.kube
#为了确保当前用户具有访问和管理集群的权限,复制管理员配置文件 admin.conf 到 $HOME/.kube/config
#该配置文件包含了与 Kubernetes API 通信所需的认证凭据和连接信息。
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
#获取当前集群中所有的节点信息
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
3.3.3 添加Kubernetes Node

在Node节点192.168.75.133和192.168.75.134执行
Master节点(192.168.75.132)

kubeadm join 192.168.75.132:6443 
--token esce21.q6hetwm8si29qxwn \
#基于 CA 证书的哈希值生成 证书不变这个不变  token和哈希值通过上文创建master节点之后显示的信息获取
--discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5

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

kubeadm token create --print-join-command
3.3.4 部署CNI网络插件

为了满足容器之间和容器与外部网络之间的通信需求,需要使用容器网络接口(Container Network Interface,CNI)插件。CNI插件是一个独立的二进制工具,它负责在Kubernetes集群中创建、配置和管理容器网络。CNI插件在每个节点上为容器创建虚拟网络接口,并将这些接口连接到物理网络或其他容器网络中。

部署CNI网络插件在Kubernetes中有几个主要原因:

  • 跨节点通信:Kubernetes集群通常由多个节点组成,每个节点上都运行着一些容器。CNI插件允许容器在不同节点上进行通信,使得跨节点的容器互联变得更加简单和高效。
  • IP地址管理:CNI插件可以为容器分配和管理IP地址。每个容器都可以获得一个唯一的IP地址,这样容器之间就可以通过IP地址进行通信。
  • 容器网络隔离:CNI插件通过各种方式实现网络隔离,例如使用网络命名空间、VLAN等。这样,每个容器都有自己的网络环境,互不干扰。
  • 第三方网络服务集成:CNI插件可以与各种第三方网络服务集成,如Flannel、Calico、Weave等。这些网络服务提供了额外的功能,如网络安全、负载均衡等。

总而言之,部署CNI网络插件是为了支持Kubernetes集群中容器之间的通信和网络管理,使得容器在不同节点上可以高效地互联,并提供网络隔离和其他网络功能。

#下载Flannel的配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#创建Flannel部署所需的各种资源
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#查看Pod的状态
kubectl get pods -n kube-system
#NAME                          READY   STATUS    RESTARTS   AGE
#kube-flannel-ds-amd64-2pc95   1/1     Running   0          72s
3.3.5 测试K8s集群

创建一个Pod查看验证是否能够正常运行

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

访问地址:http://NodeIP:Port

你可能感兴趣的:(kubernetes,容器,云原生)