K8S快速搭建教程
Kubernetes(通常简写为K8s)是一个用于自动化容器化应用程序部署、扩展和管理的开源平台。它提供了一种容器编排的解决方案,可以帮助您管理和调度大规模的容器化应用程序。Kubernetes 的设计目标是简化应用程序的部署、扩展和管理。自动化容器部署:Kubernetes 可以帮助您轻松地将容器化的应用程序部署到集群中,并确保它们在不同节点上正确运行。负载均衡和服务发现:Kubernetes
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 <linmain2> master
#hostnamectl set-hostname <linmain2> node1
#hostnamectl set-hostname <linmain3> 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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)