宁波网站建设营销定制,wordpress商品按钮代码,广州网站设计服务,服务态度 专业的网站建设一 Kubernetes
1 概述
就在Docker容器技术被炒得热火朝天之时#xff0c;大家发现#xff0c;如果想要将Docker应用于具体的业务实现#xff0c;是存在困难的一一编排、管理和调度等各个方面#xff0c;都不容易。于是#xff0c;人们迫切需要一套管理系统#xff0…一 Kubernetes
1 概述
就在Docker容器技术被炒得热火朝天之时大家发现如果想要将Docker应用于具体的业务实现是存在困难的一一编排、管理和调度等各个方面都不容易。于是人们迫切需要一套管理系统对Docker及容器进行更高级更灵活的管理就在这个时候kubernetes出现了
kubernetes的名字来自希腊语意思是舵手或领航员k8s是将k和s之间的8个字母ubernete替换为8的缩写
k8s的创造者是众人皆知的行业巨头一Google。k8s并不是一件全新的发明他是Google10多年大规模容器管理技术Borg的开源版本。2014年6月k8s由Google公司正式公布出来并宣布开源
k8s 是容器集群管理系统是一个开源的平台可以实现容器集群的自动化部署、自动扩缩容、自维护等功能
2 核心架构 master 管理节点
提供集群的控制对集群进行全局决策检测和响应集群事件 核心组件
API Server
是整个系统的对外接口供客户端和其它组件调用后端元数据存储于etcd中(键值数据库)
Scheduler
负责对集群内部的资源进行分配和调度
ControllerManager
负责管理控制器相当于大总管
etcd
存储kubernetes在运行过程中产生的所有元数据
服务端口 软件工具包
kubeadm集群配置工具
kubelet管理pod在集群中的每个节点上启动
kubectl用来与集群通信的命令行工具
contained容器管理软件Runtime
ipvsadm集群管理工具
iproute-tc网络流量管理工具
node (计算节点)
运行容器的实际节点提供运行环境在多个节点上运行水平扩展 Node核心组件
Kubelet
负责监视Pod、包括创建、修改、删除等
Kube-proxy
主要负责为Pod对象提供代理实现service的通信与负载均衡
Runtime
容器管理contained
image 镜像仓库
存储镜像为节点提供镜像支持
仓库组件Registry 或 Harbor
二 calico
1 概述
在虚拟化平台中比如 OpenStack、Docker 等都需要实现workloads 之间互连但同时也需要对容器做隔离控制设置访问策略calico 就可以解决以上所有问题
calico 可以让不同节点上的容器实现互联互通同时也可以设置访问策略它是一种容器之间网络互通的解决方案
2 优势
更节约资源Calico 使用的三层路由方法抑制二层广播减少了资源开销并且具有可扩展性。
更容易管理因为没有隧道意味着 workloads 之间路径更短更简单配置更少更容易管理
更少的依赖: Calico 仅依赖三层路由可达
适配性广较少的依赖性使它能适配所有 VM、Container、白盒或者混合环境场景。
三 kubeadm
常用选项
命令选项命令说明help命令帮助信息version版本信息config镜像管理命令init集群初始化命令reset还原、删除集群配置join计算节点加入集群tokentoken凭据管理
四 集群管理命令
kubectl 是用于控制 Kubernetes 集群的命令行工具
1 语法格式
kubectl [command] [TYPE] [NAME] [flags]
command子命令如creategetdescribedelete
type资源类型可以表示为单数复数或缩写形式
name资源名称如果省略则显示所有资源信息
flags指定可选标识或附加的参数
2 集群信息管理命令
子命令说明备注help用于查看命令及子命令的帮助信息cluster-info显示集群的相关配置信息version查看服务器及客户端的版本信息api-resources查看当前服务器上所有的资源对象api-versions查看当前服务器上所有资源对象的版本config管理当前节点上kubeconfig 的认证信息
help
# 查看帮助命令信息
[rootmaster ~]# kubectl help version
Print the client and server version information for the current context.Examples:# Print the client and server versions for the current contextkubectl version
... ...
cluster-info
# 查看集群状态信息
[rootmaster ~]# kubectl cluster-info
Kubernetes control plane is running at https://192.168.1.50:6443
CoreDNS is running at https://192.168.1.50:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
version
# 查看服务端与客户端版本信息
[rootmaster ~]# kubectl version
WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. Use --outputyaml|json to get the full version.
Client Version: version.Info{Major:1, Minor:26, GitVersion:v1.26.0, GitCommit:b46a3f887ca979b1a5d14fd39cb1af43e7e5d12d, GitTreeState:clean, BuildDate:2022-12-08T19:58:30Z, GoVersion:go1.19.4, Compiler:gc, Platform:linux/amd64}
Kustomize Version: v4.5.7
Server Version: version.Info{Major:1, Minor:26, GitVersion:v1.26.0, GitCommit:b46a3f887ca979b1a5d14fd39cb1af43e7e5d12d, GitTreeState:clean, BuildDate:2022-12-08T19:51:45Z, GoVersion:go1.19.4, Compiler:gc, Platform:linux/amd64}
api-resources
# 查看资源对象类型
[rootmaster ~]# kubectl api-resources
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
endpoints ep v1 true Endpoints
events ev v1 true Event
... ...
api-versions
# 查看资源对象版本
[rootmaster ~]# kubectl api-versions
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
... ...config
# 查看当前认证使用的用户及证书
[rootmaster ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-adminkubernetes kubernetes kubernetes-admin
# 使用 view 查看详细配置
[rootmaster ~]# kubectl config view
apiVersion: v1
clusters:
- cluster:certificate-authority-data: DATAOMITTEDserver: https://192.168.1.50:6443name: kubernetes
contexts:
- context:cluster: kubernetesuser: kubernetes-adminname: kubernetes-adminkubernetes
current-context: kubernetes-adminkubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-adminuser:client-certificate-data: REDACTEDclient-key-data: REDACTED
主机管理授权
[rootharbor ~]# vim /etc/hosts
192.168.1.30 harbor
192.168.1.50 master
192.168.1.51 node-0001
192.168.1.52 node-0002
192.168.1.53 node-0003
192.168.1.54 node-0004
192.168.1.55 node-0005
[rootharbor ~]# dnf install -y kubectl
[rootharbor ~]# mkdir -p $HOME/.kube
[rootharbor ~]# rsync -av master:/etc/kubernetes/admin.conf $HOME/.kube/config
[rootharbor ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[rootharbor ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 24h v1.26.0
node-0001 Ready none 22h v1.26.0
node-0002 Ready none 22h v1.26.0
node-0003 Ready none 22h v1.26.0
node-0004 Ready none 22h v1.26.0
node-0005 Ready none 22h v1.26.0
五 Pod
1 概述
Pod 就像是豌豆英一样它由一个或者多个容器组成
Pod 是Kubernetes中最小的管理元素
Pod 是一个服务的多个进程的聚合单位
安同一个 Pod共享网络IP及权限
同一个 Pod 共享主机名称
同一个 Pod 共享存储设备
2 创建过程 为什么要使用Pod?
服务之间有相关性启动容器的时候需要初始化或进行相关配置
3 生命周期
Pod 对象自从创建开始至终止的时间范围称为其生命周期在这段时间中Pod 处在多种不同的状态并执行相关操作
创建主容器为必需的操作其他为可选操作(初始化容器启动后钩子、存活性探测、就绪性探测以及终止前钩子等 4 相位状态 Pod的status字段是一个PodStatus的对象Pod对象总是应该处于其生命进程中以下几个相位 (phase) 之一
PendingPod 创建过程中但它尚未被调度完成RunningPod中所有容器都已经被创建成功CompletedPod 所有容器都已经成功终止并不会被重启FailedPod中的所有容器中至少有一个容器退出是非0状态Unknown无法正常获取到Pod对象的状态信息 3 Pod核心管理命令一
子命令说明备注run/create创建资源对象可输出资源文件模板get查看资源对象的状态信息常用参数: -o 显示格式describe查询资源对象的属性信息logs查看容器的报错信息常用参数: -c 容器名称
run
# 创建 Pod
[rootmaster ~]# kubectl run myweb --imagemyos:nginx
pod/myweb created# 查询资源对象
[rootmaster ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
myweb 1/1 Running 0 3s 10.244.1.3 node-0001[rootmaster ~]# curl http://10.244.1.3
Nginx is running !
get
语法格式kubectl get 资源类型 [资源名称] [选项/参数]
常用参数 -o name 只显示名字 -o wide 显示更加的详细信息 -o yaml 以 Yaml 语法格式显示资源对象 -o json 以 json 语法格式显示资源对象
# 查看 Pod 资源对象
[rootmaster ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myweb 1/1 Running 0 10m
# 只查看资源对象的名字
[rootmaster ~]# kubectl get pods -o name
pod/myweb
# 查看资源对象运行节点的信息
[rootmaster ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
myweb 1/1 Running 0 10m 10.244.1.3 node-0001
# 查看资源对象详细信息Yaml 格式
[rootmaster ~]# kubectl get pod myweb -o yaml
apiVersion: v1
kind: Pod
metadata:name: myweb
... ...
# 查看名称空间
[rootmaster ~]# kubectl get namespaces
NAME STATUS AGE
default Active 39h
kube-node-lease Active 39h
kube-public Active 39h
kube-system Active 39h# 查看 kube-system 名称空间中的 Pod 信息
[rootmaster ~]# kubectl -n kube-system get pods
NAME READY STATUS RESTARTS AGE
etcd-master 1/1 Running 0 39h
kube-apiserver-master 1/1 Running 0 39h
kube-controller-manager-master 1/1 Running 0 39h
kube-scheduler-master 1/1 Running 0 39h
... ...
create
系统命名空间
default 默认的命名空间不声明命名空间的Pod都在这里
kube-node-lease 为高可用提供心跳监视的命名空间
kube-public 公共数据所有用户都可以读取它
kube-system 系统服务对象所使用的命名空间
注意k8s 系统核心服务都运行在 kube-system 名称空间中
语法格式kubectl create 资源对象 [选项/参数]
# 创建名称空间资源对象
[rootmaster ~]# kubectl create namespace work
namespace/work created# 查看名称空间
[rootmaster ~]# kubectl get namespaces
NAME STATUS AGE
default Active 39h
kube-node-lease Active 39h
kube-public Active 39h
kube-system Active 39h
work Active 11s
run
语法格式kubectl run pod名称 [选项/参数]
# 创建简单 Pod 资源对象
[rootmaster ~]# kubectl -n work run myhttp --imagemyos:httpd
pod/myhttp created# 查询资源对象
[rootmaster ~]# kubectl -n work get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
myhttp 1/1 Running 0 3s 10.244.2.2 node-0002# 访问验证
[rootmaster ~]# curl http://10.244.2.2
Welcome to The Apache.
describe
语法格式kubectl describe 资源类型 [资源名称] [选项/参数]
Events 下是事务日志常用于排错
# 查看资源对象的属性信息
[rootmaster ~]# kubectl describe pod myweb
Name: myweb
Namespace: default
Priority: 0
Service Account: default
Node: node-0001/192.168.1.51
... ...
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 16m default-scheduler Successfully assigned default/myweb to node-0001Normal Pulled 16m kubelet Container image myos:nginx already present on machineNormal Created 16m kubelet Created container mywebNormal Started 16m kubelet Started container myweb# 查看 work 名称空间下的 pod 信息
[rootmaster ~]# kubectl -n work describe pod myhttp
Name: myhttp
Namespace: work
Priority: 0
Service Account: default
Node: node-0002/192.168.1.52
... ...
logs
语法格式kubectl logs Pod名称 [选项/参数]
# 访问服务并查看日志
[rootmaster ~]# curl http://10.244.1.3/info.php
[rootmaster ~]# curl http://10.244.2.2/info.php
... ...
# 查看 myweb 日志
[rootmaster ~]# kubectl logs myweb
2022/11/12 18:28:54 [error] 7#0: *2 open() /usr/local/nginx/html/info.php failed (2: No such file or directory), client: 10.244.0.0, server: localhost, request: GET /info.php HTTP/1.1, host: 10.244.2.12
# 查看 myhttp 日志
[rootmaster ~]# kubectl -n work logs myhttp
[rootmaster ~]#
排错三兄弟
kubectl get、kubectl describe、kubectl logs
4 Pod核心管理命令二
子命令说明备注exec在某一个容器内执行特定的命令可选参数: -c 容器名称cp在容器和宿主机之间拷贝文件或目录可选参数: -c 容器名称delete删除资源对象可选参数: -l 标签
exec
语法格式kubectl exec [选项/参数] Pod名称 --操作命令
常用参数-it 分配交互式终端
# 在容器内执行命令
[rootmaster ~]# kubectl exec myweb -- ls
50x.html
index.html
[rootmaster ~]# kubectl exec -it myweb -- /bin/bash
[rootmyweb html]# ifconfig eth0
eth0: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1450inet 10.244.1.3 netmask 255.255.255.0 broadcast 10.244.2.255ether 3a:32:78:59:ed:25 txqueuelen 0 (Ethernet)
... ...
cp
语法格式kubectl cp [选项/参数] 原文件 目标文件
路径格式[Pod名称绝对路径]
# 与容器进行文件或目录传输
[rootmaster ~]# kubectl cp myweb:/etc/yum.repos.d /root/aaa
tar: Removing leading / from member names
[rootmaster ~]# tree /root/aaa
/root/aaa
├── local.repo
├── Rocky-AppStream.repo
├── Rocky-BaseOS.repo
└── Rocky-Extras.repo0 directories, 4 files
[rootmaster ~]# kubectl -n work cp /etc/passwd myhttp:/root/mima
[rootmaster ~]# kubectl -n exec myweb -- ls /root/
mima
delete
集群中所有资源均可使用 delete 命令删除
语法格式kubectl delete [选项/参数] 资源类型 资源名称
# 删除资源对象
[rootmaster ~]# kubectl delete pods myweb
pod myweb deleted# 删除 work 名称空间下所有 Pod 对象
[rootmaster ~]# kubectl -n work delete pods --all
pod myhttp deleted# 删除名称空间
[rootmaster ~]# kubectl delete namespaces work
namespace work deleted
六 资源对象文件
1 概述
k8s中把可以创建或配置的应用和服务称为资源对象。Kubernetes 对象是“目标性记录”使用这些对象去表示整个集群的状态。我们在集群中创建的 Pod、负载均衡、存储、网络服务等等都是资源对象创建 Kubernetes 对象时必须提供资源对象的一些基本信息(例如:资源的对象的名字)以及描述描述该对象的期望状态特征(规约)如果我们在文件中使用 Yaml 的语法格式描述了上面的信息这个文件就是资源对象文件
为什么要使用资源对象文件?
命令无法持久化没有历史记录不方便重现服务众多多个容器之间有关联性管理不方便很多高级的复杂的功能靠简单的命令方式无法实现这些都需要使用资源文件描述
2 作用
可以创建、删除、变更、管理资源对象
3 创建
简单资源对象可以使用“kubectI”直接创建
高级资源对象需要使用“资源对象文件”创建
4 最简单的资源对象文件
[rootmaster ~]# vim myweb.yaml
--- # Yaml文件起始标志
kind: Pod # 当前创建资源的类型
apiVersion: v1 # 当前资源对应的版本
metadata: # 属性信息元数据name: myweb # 属性信息资源的名称
spec: # 资源的特定描述containers: # 容器资源的特定描述- name: webserver # 容器的名称image: myos:nginx # 启动容器使用的镜像
status: {} # 资源状态运行后自动生成
5 静态Pod
静态 Pod 是由 kubelet 守护进程直接管理的 Pod不需要AP|服务器监管。与由控制面管理的 Pod 不同
kubelet 监视每个静态 Pod(在它崩溃之后重新启动)
静态 Pod 永远都会绑定到一个指定节点上的 Kubelet
静态Pod的spec不能引用其他 API对象
静态 Pod 配置路径: /var/lib/kubelet/config.yaml
6 资源文件管理命令
子命令说明备注create创建文件中定义的资源支持指令式和资源对象文件配置apply创建更新文件中定义的资源只支持资源对象文件声明式delete删除文件中定义的资源支持指令式和资源对象文件配置
注意删除Pod后kubelet会自动重建Pod删除资源文件才能彻底删除Pod
列如rm -f /etc/kubernetes/manifests/myweb.yaml
命令语法kubectl [create|apply|delete] -f 资源文件名称.yaml
create
# 创建资源对象
[rootmaster ~]# kubectl create -f myweb.yaml
pod/myweb created
# 不能更新重复执行会报错
[rootmaster ~]# kubectl create -f myweb.yaml
Error from server (AlreadyExists): error when creating myweb.yaml: pods myweb already exists
delete
# 使用资源对象文件删除
[rootmaster ~]# kubectl delete -f myhttp.yaml
pod myhttp deleted
[rootmaster ~]# kubectl get pods
No resources found in default namespace.
apply
# 创建资源对象
[rootmaster ~]# kubectl apply -f myweb.yaml
pod/myweb created
# 更新资源对象
[rootmaster ~]# kubectl apply -f myweb.yaml
pod/myweb configured
# 删除资源对象
[rootmaster ~]# kubectl delete -f myweb.yaml
pod myweb deleted# 拓展提高
# 与 kubectl apply -f myweb.yaml 功能相同
[rootmaster ~]# cat myweb.yaml |kubectl apply -f -