Kubernetes 集群简介 部署搭建 及常用命令

Kubernetes 集群简介


Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。它为容器提供了一个完整的管理框架,帮助开发者和运维团队在大规模环境中高效地部署和管理应用。

Kubernetes 集群是由多个组件组成的,主要包括控制平面和工作节点。集群的核心目的是确保容器化应用的高可用性、可扩展性、负载均衡、自动化部署等功能。

Kubernetes 集群的基本架构
一个标准的 Kubernetes 集群通常由以下几个部分组成:

1. 控制平面(Control Plane)
控制平面是集群的“大脑”,负责管理和控制整个集群的操作。控制平面由多个组件构成,主要包括:

API Server(kube-apiserver):所有的 REST 操作都通过 API Server 与集群交互。它是 Kubernetes 集群的入口,负责处理客户端请求、管理集群状态等。
Controller Manager(kube-controller-manager):负责集群的控制循环,管理一些后台任务,如副本控制器(Replicas)、节点管理、部署管理等。
Scheduler(kube-scheduler):负责将待调度的 Pod 安排到合适的工作节点上。调度策略基于节点的资源、约束条件等进行决策。
etcd:一个高可用的键值存储系统,存储了集群的所有状态数据(如 Pod 的状态、服务发现等)。
2. 工作节点(Worker Node)
工作节点负责运行容器化的应用,每个工作节点都运行着以下几个重要组件:

kubelet:是工作节点上的主要代理,负责管理节点上的容器生命周期,确保容器的状态符合期望。
kube-proxy:负责实现网络代理和负载均衡,管理节点上的服务访问。
容器运行时:例如 Docker、containerd 等,负责管理容器的生命周期,包括创建、启动、停止容器等操作。
Kubernetes 集群的基本概念
Kubernetes 集群中有多个基本的资源和概念,下面列出了一些核心元素:

Pod:Pod 是 Kubernetes 中最小的部署单元,它封装了一个或多个容器。Pod 内部的容器共享网络和存储资源。
Node:Node 是集群中的工作节点,负责运行容器化的应用程序。
Deployment:Deployment 是一种用于声明和管理 Pod 的资源,它支持 Pod 的自动部署、滚动更新和回滚等。
Service:Service 提供了一个抽象的网络访问层,允许外部或集群内部的服务与应用程序进行通信。
Namespace:Namespace 用于将集群中的资源进行逻辑分隔,使得不同的团队或项目可以在同一个集群内独立管理。
ReplicaSet:ReplicaSet 负责确保集群中有指定数量的 Pod 副本在运行。
StatefulSet:类似于 ReplicaSet,但用于管理有状态应用(如数据库),提供稳定的网络身份和存储。
Kubernetes 集群的核心功能
自动化部署和回滚:Kubernetes 能够自动化部署应用程序,并支持在出现问题时快速回滚到之前的稳定状态。
负载均衡和服务发现:Kubernetes 提供了内建的负载均衡机制,自动将流量分配到集群中的不同 Pod 上。同时,Kubernetes 也支持服务发现,使得应用程序可以轻松找到其他服务。
自动扩展:Kubernetes 可以根据负载自动调整 Pod 的副本数量,确保应用具有弹性。
自我修复:当 Pod 或节点出现故障时,Kubernetes 会自动重启或重新调度容器,以保证应用的高可用性。
资源管理:Kubernetes 提供了 CPU、内存等资源的管理和限制,确保应用的资源分配符合预期。
声明式管理:Kubernetes 支持声明式的资源管理,用户只需要描述期望的状态,Kubernetes 会负责实现这一目标。
Kubernetes 集群的优势
高可用性:通过负载均衡、故障恢复和自动重调度,Kubernetes 提供了高可用的应用环境。
弹性伸缩:Kubernetes 可以自动根据负载情况进行水平扩展和收缩,以应对不同的流量需求。
简化的容器管理:Kubernetes 抽象化了容器管理的复杂性,提供了简单的 API 进行管理。
多云和混合云支持:Kubernetes 可以在不同云平台之间迁移应用,实现跨平台部署。
总结
Kubernetes 是一个功能强大且灵活的容器管理平台,它帮助开发者和运维人员自动化地部署、扩展和管理容器化的应用程序。通过 Kubernetes 集群,可以实现高度可用、可扩展、自动化管理的云原生应用部署。

一、环境准备


服务器要求:
最小硬件配置:2核CPU、4G内存、30G硬盘。
服务器可以访问外网。

软件环境:
操作系统:Anolis OS 7.9
Docker:18.06.1版本
Kubernetes:v1.18.0版本
服务器清单:
master:192.168.153.221
node1:192.168.153.222
node2:192.168.153.223

二、环境配置(每台服务器都要配置)


# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
# 临时
setenforce 0  
# 永久
sed -i 's/enforcing/disabled/' /etc/selinux/config  

# 关闭swap
# 临时
swapoff -a  
# 永久
sed -ri 's/.*swap.*/#&/' /etc/fstab 

#永久设置hostname (根据机器分别设置对应的主机名 mster、node1、node2)
sudo hostnamectl set-hostname master
sudo hostnamectl set-hostname node1
sudo hostnamectl set-hostname node2

#在master节点上面hosts文件添加内容
sudo cat >> /etc/hosts << EOF
192.168.153.221 master
192.168.153.222 node1
192.168.153.223 node2
EOF

#将桥接的IPv4流量传递到iptables的链
sudo cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

#使k8s.conf立即生效
sudo sysctl --system

#时间同步
#安装 ntpdate工具
sudo yum install -y ntpdate
#执行同步时间命令
sudo ntpdate time.windows.com

三、安装Docker(每台服务器都要安装)

#安装依赖
yum install -y net-tools
yum install -y wget
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

#设置阿里云镜像源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

#安装指定版本的docker-ce
sudo yum -y install docker-ce-18.06.1.ce-3.el7

#启动Docker服务  
sudo systemctl start docker
#查看服务状态:       
sudo systemctl status docker
#设置开机自启
sudo systemctl enable docker
#查看docker 版本
sudo docker --version

#重启服务器
sudo reboot now

#查看docker配置是否生效
sudo docker info

四、开始安装Kubernetes

#添加yum软件源kubernetes.repo为阿里云(每台服务器都要安装)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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
EOF

#安装 kubelet、kubeadm、kubectl(每台服务器都要安装)
sudo yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

#设置开机启动和启动(每台服务器都要安装)
sudo systemctl enable kubelet 
sudo systemctl start kubelet

#开始部署Kubernetes

#Kubernetes初始化(master节点上面)
kubeadm init \
--v=5 \
--apiserver-advertise-address=192.168.153.221 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
#注释 
kubeadm init \
  --v=5 \  # 设置日志级别,'5' 是较高的详细日志级别,便于调试
  --apiserver-advertise-address=192.168.153.221 \  # API 服务器的广告地址,节点需要能够通过此地址访问 Kubernetes API Server
  --image-repository=registry.aliyuncs.com/google_containers \  # 指定 Kubernetes 控制平面镜像的仓库地址,默认为 Docker Hub,这里使用阿里云镜像仓库
  --kubernetes-version=v1.18.0 \  # 指定要安装的 Kubernetes 版本,这里为 v1.18.0
  --service-cidr=10.96.0.0/12 \  # 集群内服务的 CIDR 地址段,这里设置为 10.96.0.0/12,Kubernetes 服务(如 ClusterIP)将分配在此范围内
  --pod-network-cidr=10.244.0.0/16    # Pod 网络的 CIDR 地址段,这里设置为 10.244.0.0/16,指定了 Pod 所在的网络范围,通常与 CNI 插件(如 Flannel)一起使用
#
#输出结果出现以下内容表示成功
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.153.221:6443 --token 10xqir.niwio3jacc54a4qj \
    --discovery-token-ca-cert-hash sha256:267e7a7fcc41ebfc2120abc9d171f612373b0610e906feef36f22d253d124e13 
#

#重新生成 kubeadm join 所需的命令和 token。
sudo kubeadm token create --print-join-command

#加入集群(在node节点执行命令)
 kubeadm join 192.168.153.221:6443 --token fjoeha.7a2hiqp8sc3tpr01     --discovery-token-ca-cert-hash sha256:267e7a7fcc41ebfc2120abc9d171f612373b0610e906feef36f22d253d124e13

#输出结果出现以下内容表示成功
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
#

#拷贝k8s认证文件(master节点上面)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

#查看Kubernetes集群中所有节点的详细信息(master节点上面)
kubectl get nodes

五、常用 kubectl 命令

功能命令说明
集群和节点管理kubectl cluster-info查看集群的基本信息
kubectl version查看集群版本信息
kubectl get nodes查看集群中所有节点的状态
kubectl describe node <node-name>查看单个节点的详细信息
Pod 管理kubectl get pods --all-namespaces查看所有命名空间下的所有 Pod
kubectl get pods -n <namespace>查看指定命名空间的所有 Pod
kubectl describe pod <pod-name> -n <namespace>查看单个 Pod 的详细信息
kubectl logs <pod-name> -n <namespace>查看 Pod 的日志
kubectl logs -f <pod-name> -n <namespace>实时查看 Pod 的日志
kubectl exec -it <pod-name> -n <namespace> -- <command>在 Pod 中执行命令
kubectl exec -it <pod-name> -n <namespace> -- /bin/bash进入 Pod 容器的交互式终端
kubectl delete pod <pod-name> -n <namespace>删除指定 Pod
Deployment 管理kubectl get deployments -n <namespace>查看所有 Deployment
kubectl describe deployment <deployment-name> -n <namespace>查看 Deployment 详细信息
kubectl set image deployment/<deployment-name> <container-name>=<new-image> -n <namespace>更新 Deployment 的镜像
kubectl rollout restart deployment <deployment-name> -n <namespace>滚动更新 Deployment
kubectl rollout status deployment <deployment-name> -n <namespace>查看 Deployment 更新状态
kubectl rollout undo deployment <deployment-name> -n <namespace>回滚 Deployment
Service 管理kubectl get svc -n <namespace>查看所有 Service
kubectl describe svc <service-name> -n <namespace>查看指定 Service 的详细信息
kubectl expose pod <pod-name> --port=<port> --name=<service-name> -n <namespace>将 Pod 暴露为 Service
kubectl expose deployment <deployment-name> --port=<port> --name=<service-name> -n <namespace>将 Deployment 暴露为 Service
Namespace 管理kubectl get namespaces查看所有命名空间
kubectl create namespace <namespace-name>创建命名空间
kubectl delete namespace <namespace-name>删除命名空间
ConfigMap 和 Secret 管理kubectl get configmap -n <namespace>查看所有 ConfigMap
kubectl describe configmap <configmap-name> -n <namespace>查看 ConfigMap 详细信息
kubectl create configmap <configmap-name> --from-literal=<key>=<value> -n <namespace>创建 ConfigMap
kubectl delete configmap <configmap-name> -n <namespace>删除 ConfigMap
kubectl get secret -n <namespace>查看所有 Secret
kubectl describe secret <secret-name> -n <namespace>查看 Secret 详细信息
kubectl create secret generic <secret-name> --from-literal=<key>=<value> -n <namespace>创建 Secret
资源管理kubectl top nodes查看节点资源使用情况
kubectl top pods -n <namespace>查看 Pod 的资源使用情况
集群状态和健康检查kubectl get componentstatuses查看集群组件状态
kubectl get --raw='/healthz'查看 API 服务器健康状态
Pod 和资源调度kubectl label nodes <node-name> <label-key>=<label-value>给节点添加标签
kubectl apply -f <pod-definition-file>.yaml创建或更新 Pod
Pod 管理(高级)kubectl get pods --show-labels查看 Pod 和相关的 Deployment
kubectl delete pod <pod-name> --force --grace-period=0 -n <namespace>强制删除 Pod
kubectl get events -n <namespace>查看 Pod 相关事件
调试和执行命令kubectl exec -it <pod-name> -- /bin/bash进入 Pod 容器交互式终端
kubectl cp <local-file> <namespace>/<pod-name>:<pod-path>复制本地文件到 Pod 中
kubectl cp <namespace>/<pod-name>:<pod-path> <local-file>从 Pod 复制文件到本地
故障排查和日志kubectl get events --sort-by='.metadata.creationTimestamp'查看集群事件
kubectl logs <pod-name> -n <namespace> --previous查看 Pod 的历史日志(失败的容器)

这个表格总结了常用的 kubectl 命令,你可以根据需要快速查找命令来进行集群、Pod、Service 和其他 Kubernetes 资源的管理和操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GHY云端大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值