K8s脑图
2024-06-30 17:56:46 0 举报
AI智能生成
K8s从安装部署到使用全流程
作者其他创作
大纲/内容
K8s安装
安装docker
依赖包
yum -y install yum-utils
配置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装管理容器从创建到终止整个生命周期的核心软件组件
yum -y install containerd.io
设置开机自启
systemctl enable containerd.service --now
安装k8s的kubeadm,kubelet,kubectl
配置yum源
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
安装软件
主节点:yum -y install kubelet kubeadm kubectl --disableexcludes=kubernetes
副节点:yum -y install kubelet kubeadm --disableexcludes=kubernetes
启动kubectl
systemctl enable --now kubelet
初始化master节点
1.启动bridge
modprobe br_netfilter
2.打开网桥功能
sysctl -w net.bridge.bridge-nf-call-iptables=1
3.打开路由功能
sysctl -w net.ipv4.ip_forward=1
4.配置套接字
crictl config image-endpoint unix:///run/containerd/containerd.sock
crictl config runtime-endpoint unix:///run/containerd/containerd.sock
5.把配置文件写到配置目录
containerd config default > /etc/containerd/config.toml
6.把补全命令写到环境变量里
crictl completion >> /root/.bash_profile
systemctl restart containerd.service
source /root/.bash_profile
yum -y install bash-completion
子主题
kubeadm init --apiserver-advertise-address 172.17.0.70(本机IP地址) --pod-network-cidr=10.244.0.0/16(容器网络)
若想将容器网络修改网段的话修改finally配置文件
kube-finnel.yml
安装finally
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
家目录配置密钥
mkdir .kube
cp /etc/kubernetes/admin.conf .kube/config
即可运行:kubectl get node
加入计算节点(计算节点运行)
kubeadm join 172.17.0.70:6443 --token fpmtfd.xufy6cg02y6goj1 --discovery-token-ca-cert-hash sha256:xxxxxxxxxxx(密钥)
刷新密钥
kubeadm token create --print-join-command
K8s自带pod的作用
Scheduler
作用:挑选合适的节点运行容器
Controller Manager
作用:保障容器的数量是客户所需求
etcd
作用:数据记录的数据库
apiserver
作用:下发命令,查询,创建,删除等
查看api版本命令:kubectl get apiservices.apiregistration.k8s.io
coredns
作用:内部域名解析
flannel
作用:容器提供网络
kube-proxy
作用:代替原来的docker-proxy
kubelet
作用:上告节点的情况,容器情况
K8s命令
查看node节点状态
kubectl get node
查看全部pod状态
kubectl get pod -A
kubectl get pods -o wide
查看详细信息
运行
kubectl applay -f name.yml
用于获取集群中所有命名空间中的 Deployment 资源对象的信息
kubectl get deployments.apps
加命名空间查看指定命名空间的信息
kubectl get deployments.apps -n my-namespace
查看deployments详情
kubectl describe deployments.apps
kubectl describe deployments.apps nginx-deployment -o wide
查看pod详细信息
kubectl describe pod myjob-k2kc5
删除
kubectl delete -f name.yml
K8s负载类型
Demployment
web容器,不用保存持久化数据容器
修改容器数量的话,不会删除之前的容器会新增加容器数量,减少优先减少新创建的
保障容器数量,在初次创建的时候会均衡到所有节点,当故障时候优先保障容器数量,不能自动或手动更改容器节点
污点标签
现有的容器不发配到其他节点,后面的容器不会发配到这个节点
NoSchedule
现有的容器不发配到其他节点,后面的容器尽量不会发配到这个节点
PreferNoschedule
现有的容器发配到其他节点,后面的容器不会发配到这个节点
NoExecute
Daemonset
节点监控,节点日志收集,每一个节点部署一共,而且仅仅只有一个
查看daemonset节点
kubectl get daemonset.apps -A
statefulset
mysql,每个容器需要持久化保存数据
job
科学计算,容器运算完就可以退出,不需要持久运行的业务都是用job
restartPolicy指定什么情况下需要重启容器
对于job,只能设置为Never或者OnFailurs
never永远不重启
故障不重启会重新生成新的pod,故障7次后不会在生成
重新生成pod会生成到其他节点上
OnFailurs应为故障退出了重启
节点是正常的,故障之后需要重启
故障五次后就会删除pod不在生成
对于其他controller(比如Deployment)可以设置为Always
设置parallelism参数可以同时运行多个job
cronjob
定时任务的容器
schedule: "*/1 * * * *"设置计划的参数
通过kubectl get cronjob 查看CronJob状态
可以生成多个job,每次运行生成一个
可以通过kubectl get jobs 查看job执行情况
K8s优点和主要作用
华为云多容器管理平台
管理多个K8s平台包括阿里云和线下自建的K8s
基于Volcano引擎
Kubernetes(简称K8s)的优点
1.可扩展性
K8s允许自动管理和扩展容器,可以根据需求动态增加或减少容器的数量,以应对高流量和负载变化。
2.高可用性
K8s通过自动重启故障的容器、复制服务以及提供自我修复机制,确保应用程序的高可用性和容错能力。
3.资源管理
K8s能够有效地管理和优化容器使用的CPU、内存、存储等资源,避免资源浪费并确保应用程序的性能。
4.方便维护和升级
K8s简化了应用程序的部署、更新和回滚过程,使得版本控制和维护变得更容易。
5.微服务支持
K8s非常适合微服务架构,可以独立部署、管理和扩展多个服务,每个服务通过API进行通信。
6.敏捷开发和持续集成/部署(CI/CD)
K8s促进了快速、可靠的应用程序开发、测试和部署流程,支持频繁的迭代和更新。
7.环境一致性
K8s保证了应用程序在开发、测试和生产环境之间的一致性,减少了环境差异导致的问题。
8.开发与运维分离
K8s通过容器化和声明式配置,将应用程序的构建和发布与基础设施部署分离,提高了效率和灵活性。
9.自动化
K8s提供了自动化部署、扩展、滚动更新、健康检查等操作,减少了手动干预和管理复杂性。
10.社区支持和生态系统
K8s拥有活跃的开源社区和丰富的生态系统,包括众多插件、工具和第三方服务集成。
11.跨云和本地环境的兼容性
K8s可以在不同的云提供商和本地环境中运行,提供了灵活的多云和混合云部署选项。
Kubernetes (简称K8s) 的主要作用
1.容器编排
K8s能够管理和协调大量的容器,确保它们在集群中的高效、稳定运行。
2.服务发现和负载均衡
K8s提供了服务发现机制,使得应用程序可以自动找到并连接到相关服务。同时,它还实现了负载均衡,将网络流量分发到各个容器,以确保服务的高可用性和性能
3.自动化部署和回滚
K8s支持自动化部署流程,可以轻松地将容器化应用部署到集群中,并在出现问题时自动回滚到之前的稳定版本。
4.资源管理
K8s能够有效地管理和优化容器使用的CPU、内存、存储等资源,确保资源的合理分配和应用程序的性能。
5.弹性伸缩
根据预定义的策略或实时监控的数据,K8s可以自动调整容器的数量,实现水平扩展或收缩,以应对业务需求的变化。
6.自我修复能力
K8s能够监测容器和节点的健康状态,并在检测到故障时自动进行恢复操作,如重启容器、替换节点等,以保证系统的高可用性。
7.安全性和隔离
K8s通过命名空间、网络策略和访问控制等机制,提供了一定程度的安全性和资源隔离,以满足多租户环境和安全性要求。
8.存储编排
K8s支持多种存储解决方案的集成和管理,使得应用程序可以方便地使用持久化存储,并在容器间共享数据。
9.滚动更新和版本控制
K8s允许进行滚动更新,逐步更新容器的新版本,而不会导致服务中断,同时也支持版本控制,便于回滚到之前的版本。
10.微服务架构支持
K8s为微服务架构提供了良好的支持,可以独立部署、管理和扩展多个服务,每个服务通过API进行通信。
pod节点控制
查看节点标签值
kubectl taint node k8s-0001 --show-labels
打了标签但是标签无法命中的时候,pod无法运行处于pending状态。标签命中了但是没有资源,pod无法运行,处于pengding状态
去掉标签
kubectl label nodes k8s-0002 hosttype-
把标签值设置为空
服务器打标签key=value值
kubectl label nodes k8s-0002 hosttype=gpu
容器打标签写到配置文件
service
负载服务,填对外访问的端口,负载服务需要和网站服务pod名称一样
若有新增的节点会自动增加,故障了也会自动删除
查看服务的详细信息
kubectl describe service httpd-svc
查看运行的服务
kubectl get service
查看iptables规则
iptables-save | grep xxx
该命名空间中的网络接口及其配置信息
ip netns exec xxxxxxxxx ip a
对外访问Service
NodePort
通过端口映射来实现服务pod端口对外访问,对外只能到30000-32767
LoadBalancer
将集群内部的服务暴露给外部网络,并通过云提供商的负载均衡器实现流量分发。
ClusterIP
对内访问Service
ingress
对service做负载均衡的服务
滚动更新
Rolling Update
更新版本修改参数:image:httpd:2.4.16 类型apps/v1
kubectl get deployments.apps -o wide
查看更新状态
kubectl describe deployments.apps
查看更新详细过程
kubectl get replicasets.apps -o wide
回滚
默认保存三个版本
查看revison历史记录
kubectl rollout history deploymnet httpd
查看命令的实时变化
watch -n .1 kubectl get deployments.apps httpd
回滚到某个版本
kubectl rollout undo deployment httpd --to-revision=4
后面不跟版本默认回到最后一个版本
健康检查
机制
每个容器启动时都会执行一个进程,此进程由Dockerfile的CMD或ENTRYPOINT指定,如果进程退出时返回码非零,则认为容器发生故障,kubernetes就会根据restartPolicy重启容器
startupProbe
检测是否启动成功,启动成功后交给livness
容器启动完之后就再也没有关系了
Liveness探测
存活探测:根据pod是否存活
查看重启状态
kubectl describe pod liveness
Readiness探测
业务正常:更具业务是否正常探测
当pod,ymal有问题时比如端口映射错误,会通过健康检查,如果有问题会拒绝加到service中
更新策略参数
maxSurge
控制滚动更新过程中副本总数超过DESIRED的上限。maxSurge可以是具体的整数也可以百分比,向上取整。默认为25%
maxUnavailable
控制滚动更新过程中,不可用的副本相占DESIRED的最大比例。maxUnavilable可以是具体的整数,也可以是百分比,向下取整。默认值是25%
参数
initialDelaySeconds:10
启动后10秒开始检查
PeriodSeconds:5
每五秒检查一次
failureThreshold:3
默认故障三次就确定故障
successThreshold:1
成功启动一次就算正常
timeoutSeconds:1
超时1秒
volume
分配模式
静态分配
动态分配
emptyDir
是最基础的Volume类型。
当pod从节点删除时,Volume的内容也会被删除,若容器被销毁而pod还在,则Volume不受影响
Volumen和pod生命周期一致
volumes
卷的部分
name
申请卷的名称
emptyDir
申请卷的路径 {}为空
type: DirectoryOrCreate
当目录不在时创建
查看具体挂载情况
crictl inspect + POD ID
查看ymal模板
kubectl edit pod --namespace kube-system kube-apiserver-k8s-0001
存储
PV
是管理员去底层对接存储,分布式、集中式、EVS、SFS、OBS
参数
storage: 1Gi
PV容量
accessModes
f访问模式
ReadWriteOnce
以读写能挂载到单个节点
ReadWriteMany
以读写能挂载到多个节点
persistentVolumeReclaimPolicy
回收策略
Retain
需要管理员手动回收
Recycle
清除PV中的数据,效果相当于执行rm -rf /thevolume/*
Delete
删除Storage Porvider上的对应存储资源
PVC
用户申请的存储空间
动态供给
StorageClass
standard
普遍适用于大多数工作负载的标准性能存储选项
slow
创建PC所使用的存储类型具有较低的IO性能,较慢的访问速度或者不频繁的使用场景
容器持久化实验
创建mysql Service和Pod
创建pv和pvc
节点宕机会在其他节点运行
K8s密钥
secret
保存敏感秘钥
创建秘钥
kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=123456
通过--from-literal创建
echo -n admin > ./username echo -n 123456 > ./password kubectl create secret generic mysecret --from-file=./username--from-file=./password
通过--from-file创建
cat <<EOF >env.txt username=admin password=123456 EOF kubectl create secret generic mysecret --from-env-file=env.txt
通过ymal创建
username和password用秘文需要用base64
加密方法
echo -n admin | base64
echo -n password | base64
base64反编译
echo -n YWRtaW4= | base64 --decode
可以通过秘钥文件或者环境变量加载到容器中
查看自己的secrets
kubectl get secrets mysecret
查看秘文的详细信息
kubectl edit secrets mysecret
通过挂载卷的方式来使用Secret
创建nfs给mysql文件夹通过文件夹挂载pvc
参数
secret: 下面跟密钥文件名称secretName: mysecret
items
跟存放key的username和password的路径和密码
自定义存放
通过环境变量方式来使用Secret
env下跟环境变量name: SECRET_USERNAME
configmap
configMap是明文的配置文件
dashbord
K8s的web图形化管理界面
安装
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
修改配置文件
因为Service是CluserIP类型,为了方便使用,可以通过kubectl --namespace=kubernetes-dashboard edit service kubernetes-dashboard修改成NodePort类型
登录时候先创建token
kubectl -n kube-system create token admin
0 条评论
下一页