k8s学习
一. 介绍
kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。[1]
详细作用有:
- 容器编排
- 自动化部署:k8s 可以自动部署容器化应用程序到集群中的节点上,无需手动干预。
- 自动扩展:根据应用程序的负载自动扩展或缩减容器的数量,以满足业务需求。
- 自动重启:在容器失败或节点宕机时,自动重启容器或重新调度到其他健康节点上。
- 服务发现和负载均衡
- 服务发现:k8s 提供内置的服务发现机制,使得容器间可以方便地通信。
- 负载均衡:自动在多个容器间分配流量,确保应用程序的高可用性和性能。
- 存储编排
- 动态存储管理:支持动态分配和管理存储卷,适用于有状态应用程序的数据存储需求。
- 多种存储支持:可以与多种存储后端(如本地存储、云存储等)集成。
- 配置和密钥管理
- 集中配置管理:将应用程序的配置与镜像分离,方便统一管理和更新。
- 安全密钥管理:安全地存储和管理敏感信息(如密码、密钥等),并将其注入到容器中。
- 资源管理
- 资源调度:根据资源需求(如 CPU、内存)智能调度容器到合适的节点上。
- 资源配额:限制资源使用,避免单个应用程序占用过多资源影响其他应用。
- 高可用性和容错性
- 多副本运行:通过运行多个副本确保服务的高可用性。
- 自我修复:自动检测和替换不健康的容器或节点,确保系统始终处于期望状态。
- 滚动更新和回滚
- 平滑更新:支持滚动更新,逐步替换旧版本容器,避免服务中断。
- 快速回滚:如果更新出现问题,可以快速回滚到之前的稳定版本。
- 跨环境一致性和移植性
- 环境一致性:在开发、测试和生产环境中保持一致的部署体验。
- 云移植性:支持在多种云平台(如 AWS、Azure、GCP)和本地数据中心之间移植应用程序。
- 多租户支持
- 资源隔离:在共享集群中,能够隔离不同租户的资源,确保安全性和性能。
- 命名空间管理:使用命名空间对资源进行逻辑隔离,方便多团队或项目管理。
二.k8s部署
这里主要配置的k8s三台设备的集群,是终端型k8s(无UI),在三台Centos7环境下进行配置,本篇部署参考[2]《适合新手的K8s完整部署教程》。这边是在相应虚拟机里进行部署,需要一定的Linux基础,并且是在学习环境中的(局域网中),生产环境的话要打通相应的网络,做好防护。
yum换源
需要给Centos7提前换源,否则会失败,换源方法自己查查,具体有wget下载、网上下载导入等方法。有
wget可以直接执行如下:1
2
3
4
5
6
7
8
9# 备份原来镜像源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 更换阿里云的镜像源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 构建yum 元数据缓存
yum clean all
yum makecache初始化相应CentOS7配置,固定好IP并改好DNS
进入`/etc/sysconfig/network-scripts/ifcfg-ens33``
``BOOTPROTO
改为“static”`IPADDR改为自己的ip地址配置好相应DNS和网关
做好IP映射
进入
/etc/hosts,把三台设备的路由跟在后面,如我本地1
2
3192.168.179.150 k8s01
192.168.179.151 k8s02
192.168.179.152 k8s03其中150的是我的master机器。
三台机器需要执行以下操作(非生产环境)
1
2
3
4
5
6
7# a:安装epel-release源
yum -y install epel-release
# b:关于防火墙和selinx,避免与docker容器的防火墙规则出现冲突
systemctl stop firewalld
systemctl disable firewalld
setenforce 0开始部署master主机,可随意选择一台作为根主机
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33# a:安装etcd和kubernetes-master
yum install etcd
yum install kubernetes-master
# b:编辑/etc/etcd/etcd.conf文件
vi /etc/etcd/etcd.conf
# 编辑如下:
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
# c:编辑/etc/kubernetes/apiserver文件
vi /etc/kubernetes/apiserver
# 编辑如下:
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission- control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""
# d:启动并设置开机启动etcd、kube-apiserver、kube-controller-manager、kube-scheduler等服务
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
# 这段代码需完整复制到命令行进行执行
# e:etcd中定义flannel网络
etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'以下操作在node1和node2节点进行操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45# 1、yum安装flannel和kubernetes-node
yum install -y flannel
yum install -y kubernetes-node
# 2、为flannel网络指定etcd服务
# a:修改 /etc/sysconfig/flanneld文件
vi /etc/sysconfig/flanneld
#修改如下(如果没有的话就新增上去):
FLANNEL_ETCD="http://192.168.179.150:2379"
FLANNEL_ETCD_KEY="/atomic.io/network"
# 注意:这里的192.168.179.150是我们的master主机的IP
# b:修改/etc/kubernetes/config文件
vi /etc/kubernetes/config
#修改如下:
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.179.150:8080"
# c:修改对应node的配置文件/etc/kubernetes/kubelet
#Node1的修改如下:
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=192.168.179.151" #修改成Node1的IP
KUBELET_API_SERVER="--api-servers=http://192.168.179.150:8080" #指定Master节点的 API Server
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""
# Node2:修改如下:
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=192.168.179.152" #修改成Node2的IP
KUBELET_API_SERVER="--api-servers=http://192.168.179.150:8080" #指定Master节点的 API Server
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""
# 3、在Node1和Node2上同时执行以下代码进行启动kube-proxy,kebelet,docker,flanneld等服务,并且设置开机启动
for SERVICES in kube-proxy kubelet docker flanneld; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
# 以上代码需要复制到命令行中完整执行进行验证
在Master节点上执行
kubectl get node出现如下内容,表示部署完毕。

部署完毕
三. k8s使用
kubectl是控制k8s集群的命令。
常规操作
- 查看集群信息
kubectl cluster-info:查看集群的主节点信息等。
- 获取资源列表
kubectl get <资源类型>:查看指定资源的列表。例如:kubectl get nodes:查看节点列表。kubectl get pods:查看 Pod 列表。kubectl get services:查看服务列表。kubectl get deployments:查看部署列表。kubectl get all:查看所有资源。
- 查看资源详细信息
kubectl describe <资源类型> <资源名称>:查看指定资源的详细信息。例如:kubectl describe pod:查看 Pod 的详细信息。kubectl describe node:查看节点的详细信息。
- 创建资源
kubectl create -f <文件路径>:根据 YAML 文件创建资源。
- 删除资源
kubectl delete <资源类型> <资源名称>:删除指定资源。例如:kubectl delete pod:删除 Pod。kubectl delete deployment:删除部署。
kubectl delete -f <文件路径>:根据 YAML 文件删除资源。
Pod 操作
- 进入 Pod
kubectl exec -it -- /bin/sh或kubectl exec -it -- /bin/bash:进入 Pod 的 Shell。
- 查看 Pod 日志
kubectl logs:查看 Pod 的日志。kubectl logs -f:实时查看 Pod 的日志。
部署操作
- 更新部署
kubectl set image deployment/ <容器名称>=<新镜像>:更新部署中的镜像。
- 查看部署状态
kubectl rollout status deployment/:查看部署的更新状态。
服务操作
- 查看服务
kubectl get svc:查看服务列表。
- 访问服务
kubectl port-forward svc/<服务名称> <本地端口>:<服务端口>:将服务端口转发到本地端口。
命名空间操作
- 查看命名空间
kubectl get namespaces:查看命名空间列表。
- 切换命名空间
kubectl config set-context --current --namespace=<命名空间名称>:切换到指定的命名空间。
详情学习请参考[3]《K8S详解(5万字详细教程)》。
四. 基于k8s的后端开发
(尽请期待)
参考资料
以上文献
最后
- 标题: k8s学习
- 作者: Sabthever
- 创建于 : 2025-04-28 08:57:10
- 更新于 : 2025-08-01 09:36:14
- 链接: https://sabthever.cn/2025/04/28/technology/operation/k8s学习/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
