第9关 项目部署 完成闭环 k8s初窥门径
适当的焦虑能够帮你不断的成长,当你没有目标的时候,会比过度焦虑更可怕,人往往是在发展中被淘汰的。——cap
9.1 k8s 基础入门及架构介绍
主要内容:
(1)k8s基本介绍
(2)k8s安装
(3)kompose工具介绍
(4)应用部署到k8s中
什么是k8s?k8s全称是kubernetes。
(1)k8s是谷歌开源的容器集群管理系统
(2)可以简化应用程序的工作流,加快开发速度
(3)由Google的工程师开发和设计
为什么需要用到k8s?它解决了什么问题和什么痛点?
(1)在生产环境中会涉及多个容器 就是我们把生产型的应用打包成镜像的时候,有的时候这个应用它一个容器可能满足不了性能的需求,当然我们会开多个容器,也就相当于在多台机子上进行部署。生产型的应用会是这样子的,要求你多个容器多个地方去部署。
(2)容器必须跨多个服务器主机进行部署 就是我们这里的容器必须跨多个服务器,并且在多个服务器之间进行部署,如果没有k8s,这也是一个难点。比如说我们现在docker是在单机上的,如果没有k8s,那docker需要在多个主机上面运行的话,可能要通过手工或者通过shell。
(3)借助k8s构建跨多个容器的应用服务、跨集群调度、扩展这些容器 我们可以借助k8s跨多个容器,跨多个应用,再跨集群进行调度。
这就是我们为什么需要k8s干活的原因。
3.k8s有哪些应用?
(1)跨多台主机进行容器编排 这句话是什么意思?翻译翻译就是在多个主机之间可以主动地去调用这个容器,然后决定这个容器是否起,决定这个容器在哪个节点上进行跑。这就是一个跨多台主机的容器编排。
(2)更加充分的利用硬件,最大程度的获取运行企业应用所需的资源 这句话怎么去解释?就是我们所有的硬件加到了k8s集群里面,k8s它会把所有的硬件统一的计算。
当我们一个容器,假如说需要4核8g的时候,它会通过它的计算调度规则,计算出哪一个节点有4核8g,接着会把pod调到那个节点上,然后进行使用。如果有的节点上资源很空,它会调动到这个节点的概率就很大,如果这个节点上的资源所剩无几了,新进的应用大概就不会调用这个节点了。(3)利用自动布局,自动重启,自动复制以及自动扩展功能,对应用实施状况检查和自我修复。自动的重启,自动的扩展,这一块在传统应用上面是非常少的,这也是k8s的核心。
4.k8s相关术语 前面说的是是什么的话题,接下来介绍k8s基本词法单元。
(1)主机【master】:用于控制k8s节点的计算机,所有的任务分配都是这个节点分配的。
(2)节点【node】:负责执行请求和所分配任务的计算机。由k8s主机负责对节点进行控制。
(4)服务【service】:将工作内容与容器集分离。这里的service可以理解docker-compose里面的服务的名称,我们在k8s里面可以通过这个service的名称,主动的找到我们所对应的pod,可以转发过去。service主要是用来将工作内容与容器集分离。
(5)kubelet:运行在节点上的服务,可读取容器清单(container manifest),确保指定的容器启动并运行。它运行在我们的节点上的一个服务,它确保我们的容器按照指定的规则启动并且运行kubelet。
(6)kubectl:k8s的命令行配置工具。
5.k8s架构图
解读信息:
( 1 ) 在master节点上有一个API Server。它就是master节点上的一个主线。然后通过API Server,在master节点上还会有Scheduler【链路器】,还有ETCD,ETCD主要用于我们集群数据的存储,还有Controller Manager。在master节点上主要有这三块。
(2) 再来看一下Node节点。在Node1和Node2里面,有一个抽象的架构是Networking。网络这边会有kubelet对它进行交互,kubelet也可以通过自己的命令启动和管理 容器,容器和底层 OS系统也是有一个交互的。OS系统是建立在硬件上的。
这整体构建起来的就是k8s比较抽象的一个架构图.
然后我们这里有一个数据的传输方式,是按照不同的颜色和箭头标出来的不同的方式。比如说我们用户对于API Server这一块是通过JSON
格式来进行调用和传输,并且这个紫色的箭头是gRPC,就是kubelet和API Server进行交互。
简单理解:CNI:kubelet通过CNI跟网络进行交互 CRI:kubelet通过CRI跟容器进行交互 OCI:容器通过OCI跟OS系统层进行交互
更多参考传送门: CNI、CRI和OCI是什么? k8s中文文档
(3)组件分布图
解读信息:问3个问题即可:
(1)这张图由哪些词法单元组成?
(2)每个词法单元之间的联系是什么?
(3)数据是怎么流转的?
(1)可以看到这里有一个master节点和一个工作节点worker node。在master节点上有三个非常重要的组件。当然这个etcd也可以部署在master上,也可以单独的部署。
但是最重要的这个三个组件肯定要部署在master节点上。
(a) API Server:用于来接收我们用户的一些操作,包括命令行的一些操作也是通过API Server进行接收的。
(b) Controller Managers:控制器。不仅仅是一个controller manager,它有很多个controller manager组成,包括有副本级,包括我们的node控制器等等,我们后面会介绍。
(c) Scheduler:调度器 这三个重要的组件是部署在master上的。
当然工作节点上也会部署一些非常重要的文件。
(a) kubelet:它是用来接受 API Server 发出的一些信息,它主要和API Server进行交互,以及控制我们node节点上的一些容器,包括pod。
(b) kube-proxy:反向代理。假设我们现在有一个互联网的访问请求,还会发送到这个node节点上,有一个代理,这个k8s里面有维护反向代理的一个表,比如说来了一个请求,应该转发到哪个pod上,哪个节点上,它都是有的。【根据反向代理的表进行转发】
当这个互联网的请求进来了以后,它通过这个代理,它可以访问到具体想访问的POD上面去。
以上就是k8s的架构图解读:
(1)一个是消息的通知架构。
(2)一个是组件的分布架构。
9.2 k8s api server 架构及创建应用原理
主要内容:
(1)k8s核心组件
(a)集群管理入口:kube-apiserver
(b) 管理控制中心:kube-controller-manager 顾名思义,里面有很多的controller。
(c) 调度器:kube-scheduler 容器怎么去运行,在哪儿运行,都是通过调度器和调度算法进行计算的。
(d) 配置中心:etcd 可以单机部署,也可以以集群的方式部署。
(e) 集群管理工具:kubectl 使用率很高。
(f) 节点POD管家:kubelet 工作节点,管理docker容器、POD。
(g) 服务外部代理:kube-proxy 反向代理。
(2)每个组件里有什么
(a)
解读信息:组成解读:
api层有:
核心api,分组api,
健康检查,日志,
看板,性能度量,
OpenAPI【swagger api】。
访问控制层:通过api层以后,会来到访问控制层。该层会鉴别身份是否合法。
注册表层:主要存储一些信息。包括Pod信息,Namespace信息,Service信息,apps信息,Storage信息等等等。
ETCD集群层:最终注册表层 的这些信息也会存储起来。
主要就是这四层架构。问以下问题检测自己是否真的掌握了上述信息?API Server 架构分几层?如何跟ETCD进行交互?k8s消息通知架构和组件分布架构?
(3)k8s应用创建流程和监听机制
解读信息:
1) 通过命令行创建应用。
即 1.创建 ReplicaSet【创建复制集】 之后会把命令发送到 kube-apiserver这边。当kube-apiserver收到命令以后,会把创建写到etcd里面。etcd里面会有一个监听机制,它监听到创建的操作以后,会通知kube-apiserver有创建ReplicaSet事件的操作。此时对应图中的 3.通知创建ReplicaSet事件。
当有了 创建ReplicaSet事件的操作以后,我们会发送到kube-controller-manager里面,找到复制集的controller进行创建。与此同时会创建这个副本的监听。即图中的 0.创建ReplicaSet监听。
接下来根据副本的规则来创建POD。此时状态是 5.创建POD。
创建POD之后来到 kube-apiserver这边,记录我们创建POD事件。POD里面也有监听,就是监听 kube-apiserver etcd 里面 pod 事件的变化, 如果监测到有pod创建,etcd 会通知 kube-apiserver,事件来了,即状态是 7.通知创建POD事件。
创建pod事件会发送到调度器上,即kube-scheduler。调度器根据它一系列的调度算法,调度我们pod应该部署到哪台机子上。
与此同时也会初始化创建pod监听,即图中的 0.创建POD监听。
创建完了以后,调度器会进行调度, 即图中的 9.调度POD。
调度到到哪个节点上它会告诉 kube-apiserver。
kube-apiserver 会在etcd里面记录调度pod的事件。即图中的10.记录调度POD的事件。
记录完调度POD的事件以后,我们在kubelet上面 会获取 调度POD事件,在实际的node节点上进行更新。与此同时,也会更新POD监听。即0.更新POD监听。更新的内容就是POD节点跑在哪个节点上,会把这个信息更新到监听的记录中。
以上就是k8s应用的创建流程以及复制集,POD监听机制是什么样的流程。
核心就是kube-apiserver,etcd充当数据库的角色。
组件是怎么工作的?创建一个应用的流程及监听机制是什么?都要了解清楚。
9.3 k8s 不同种类controller 作用讲解
k8s核心组件——Controller Manager 有哪些种类呢?
(1)副本控制器:Replication Controller。简称RC控制器。
(2)节点控制器:Node Controller。
(3)资源控制器:Resource Quota Controller。就是控制我们用户里面能使用多少资源,预分配多少资源给他,都是通过这个控制器来完成的。
(4)命名空间的控制器:Namespace Controller。
(5)Endpoints 控制器:Endpoints Controller。
(6)服务控制器:Server Controller。
接下来介绍它们是干什么的。
1.Replication Controller Manager职责 (1)它稳保当前集群中有些仅有N个POD的实例,N是在RC中定义的POD副本的个数 也就是说你这个应用它要开几个POD,开几个副本都是在这个RC里面定义的。比如说你这个应用,假设有一个节点上POD挂了,少了一个POD以后,它检测到这个POD少了一个,它会在其他的地方把这个POD启动起来,满足这个副本的个数,就是它稳保的可靠性就是通过RC策略来实现的。
(2)通过调整RC的spec.replicas属性值来实现系统的扩容或者缩容。(3)通过改变RC中的POD模板(主要是镜像模板)来实现系统的滚动升级。
2.Resource Quota Controller Manager 3个层次资源配额管理 (1)容器级别:可对CPU和Memory进行限制。(2)POD级别:可对一个POD内所有的容器的可用资源进行限制。(3)Namespace级别:为Namespace(多租户)级别的资源进行限制,包括:POD,RC,Service,ResourceQuota,Secret,PV数量。
3.Endpoints Controller 说明 Endpoints Controller 是干什么的呢?
解读信息:
(1) 在k8s里面接到一个访问的时候, 首先访问到service名称,通过这个service名称,k8s是如何知道我们这个service下面的pod部署在哪台服务器上,包括它里面有哪一些pod,哪些pod的IP,真实的端口是什么,我们就是会用到Endpoints ,来记录这一系列的信息。
这里的服务它是跟Endpoints 和 POD副本进行关联的,就是记录了service下面所有的副本,它在哪里,它在哪台机子上以及在哪台机子上的端口,有一个记录的值。
Endpoints就是来干这个事情的。
4.Service Controller说明 这个 Service Controller 要跟 service 区分开来。(1)用于监听service的变化 它是来监听service的变化,也就是监听服务的变化。(2)如果services是一个LoadBalancer类型,则维护LoadBalancer表 LoadBalancer 是负载均衡的意思。它会维护这个负载均衡的表。
9.4 k8s 安装-阿里云/腾讯云创建ECS
k8s安装要求说明:
(1)至少2台2核4G的服务器
(2)CentOS 7.6/7.7/7.8
(3)安装后的软件版本为:Kubernetes v1.19.x ,Docker 19.03.11
k8s安装说明:
先访问:https://www.aliyun.com/然后关键配置截图如下:【截图就是路线图,就是路径,怎么走的】
9.5 k8s 安装 服务器基础安装
终于到了实操环节了,鸡冻坏了,在前面的枯燥的理论来回试探...
好极了,我们已经做好了准备,开始吧~
(1)登录服务器 登录方式:ssh root@公网ip_add 登录进来是这样的:
/*step1:修改主机名
hostnamectl set-hostname master.gogogo.com
查看结果
hostnamectl status
echo "127.0.0.1 $(hostname)" >> /etc/hosts
按照上述方法另外一台主机做同样的3步配置
hostnamectl set-hostname node1.gogogo.com
查看主机名配置
cat /etc/hosts
*step2:机器检查
所有节点必须保证以下条件:
1.任意节点 centos 版本为 7.6/7.7/7.8
2.任意节点 CPU 内核数量大于等于 2,且内存大于等于 4G
命令:lscpu
3.任意节点 hostname 不是 localhost,且不包含下划线、小数点、大写字母
命令:cat /etc/hosts
4.任意节点都有固定的内网 IP 地址
5.任意节点都只有一个网卡,如果有特殊目的,我可以在完成 K8S 安装后再增加新的网卡
6.任意节点上 Kubelet使用的 IP 地址 可互通(无需 NAT 映射即可相互访问),且没有防火墙、安全组隔离
7.任意节点不会直接使用 docker run 或 docker-compose 运行容器
*/
文件:base_install.sh
#!/bin/bash
# 在 master 节点和 worker 节点都要执行
# 安装 docker
# 参考文档如下
# https://docs.docker.com/install/linux/docker-ce/centos/
# https://docs.docker.com/install/linux/linux-postinstall/
# 卸载旧版本
yum remove -y docker \
docker-client \
docker-client-latest \
docker-ce-cli \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# 设置 yum repository
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装并启动 docker
yum install -y docker-ce-19.03.11 docker-ce-cli-19.03.11 containerd.io-1.2.13
mkdir /etc/docker || true
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["${REGISTRY_MIRROR}"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# Restart Docker
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
# 安装 nfs-utils
# 必须先安装 nfs-utils 才能挂载 nfs 网络存储
yum install -y nfs-utils
yum install -y wget
# 关闭 防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭 SeLinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 关闭 swap
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
# 修改 /etc/sysctl.conf
# 如果有配置,则修改
sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g" /etc/sysctl.conf
# 可能没有,追加
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
# 执行命令以应用
sysctl -p
# 配置K8S的yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 卸载旧版本
yum remove -y kubelet kubeadm kubectl
# 安装kubelet、kubeadm、kubectl
# 将 ${1} 替换为 kubernetes 版本号,例如 1.19.0
yum install -y kubelet-${1} kubeadm-${1} kubectl-${1}
# 重启 docker,并启动 kubelet
systemctl daemon-reload
systemctl restart docker
systemctl enable kubelet && systemctl start kubelet
docker version
/*
*step3: base-install.sh 所有节点基础安装
在 master主机上:
(1)复制上文中的 base-install.sh文件内容
(2)vim base-install.sh
(3)敲 i 进入编辑模式
(4)cv 粘贴内容
(5)按 esc键
(6)敲 :x 保存并退出
(7)复制粘贴执行以下命令
export REGISTRY_MIRROR=https://registry.cn-shanghai.aliyuncs.com
(8)再执行:
./base_install.sh 1.19.5
在 node1 主机上:
(1)复制上文中的 base-install.sh文件内容
(2)vim base-install.sh
(3)敲 i 进入编辑模式
(4)cv 粘贴内容
(5)按 esc键
(6)敲 :x 保存并退出
(7)复制粘贴执行以下命令
export REGISTRY_MIRROR=https://registry.cn-shanghai.aliyuncs.com
(8)再执行:
./base_install.sh 1.19.5
*/
完成结果:
9.6 k8s 安装初始化Master 节点
文件:init_master.sh
#!/bin/bash
# 只在 master 节点执行
# 脚本出错时终止执行
set -e
if [ ${#POD_SUBNET} -eq 0 ] || [ ${#APISERVER_NAME} -eq 0 ]; then
echo -e "\033[31;1m请确保您已经设置了环境变量 POD_SUBNET 和 APISERVER_NAME \033[0m"
echo 当前POD_SUBNET=$POD_SUBNET
echo 当前APISERVER_NAME=$APISERVER_NAME
exit 1
fi
# 查看完整配置选项 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2
rm -f ./kubeadm-config.yaml
cat <<EOF > ./kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v${1}
imageRepository: registry.cn-shanghai.aliyuncs.com/cap1573
controlPlaneEndpoint: "${APISERVER_NAME}:6443"
networking:
serviceSubnet: "10.96.0.0/16"
podSubnet: "${POD_SUBNET}"
dnsDomain: "cluster.local"
EOF
# kubeadm init
# 根据您服务器网速的情况,您需要等候 3 - 10 分钟
kubeadm config images pull --config=kubeadm-config.yaml
kubeadm init --config=kubeadm-config.yaml --upload-certs
# 配置 kubectl
rm -rf /root/.kube/
mkdir /root/.kube/
cp -i /etc/kubernetes/admin.conf /root/.kube/config
# 拉镜像
sudo docker pull calico/node:v3.13.1
sudo docker pull calico/pod2daemon-flexvol:v3.13.1
sudo docker pull calico/cni:v3.13.1
sudo docker pull calico/kube-controllers:v3.13.1
# 安装 calico 网络插件
# 参考文档 https://docs.projectcalico.org/v3.13/getting-started/kubernetes/self-managed-onprem/onpremises
echo "安装calico-3.13.1"
rm -f calico-3.13.1.yaml
wget https://kuboard.cn/install-script/calico/calico-3.13.1.yaml
kubectl apply -f calico-3.13.1.yaml
/* ==========》这一步用的是ECS云服务器的私有的IP。
*step4: 初始化 Master 节点 (只在 Master 节点执行)
(1)设置
在 master 节点执行:
# 替换 x.x.x.x 为 master 节点实际 IP(请使用内网 IP) 假设是192.168.100.1
# export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令
export MASTER_IP=192.168.100.1
# 替换 apiserver.gogogo.com 为 您想要的 dnsName
export APISERVER_NAME=apiserver.gogogo.com
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中,如果你不知道直接设置如下命令:
export POD_SUBNET=10.100.0.1/16
# 输出重定向到 /etc/hosts 文件中
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
# 查看配置的内容
cat /etc/hosts
在node1 节点上执行:192.168.100.1 是master节点的私有的IP,注意替换。
export MASTER_IP=192.168.100.1
export APISERVER_NAME=apiserver.gogogo.com
export POD_SUBNET=10.100.0.1/16
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
cat /etc/hosts
在 master 节点上执行:检查执行结果
# 只在 master 节点执行
# 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
watch kubectl get pod -n kube-system -o wide
# 查看 master 节点初始化结果
kubectl get nodes -o wide
如果状态为pending 则手动拉一下镜像
sudo docker pull calico/node:v3.13.1
sudo docker pull calico/pod2daemon-flexvol:v3.13.1
sudo docker pull calico/cni:v3.13.1
sudo docker pull calico/kube-controllers:v3.13.1
*/
9.7 k8s node 节点加入集群
/*
*step5: 初始化 Worker 节点
1.首先在 Master 节点上执行以下命令
# 只在 master 节点执行
kubeadm token create --print-join-command
可获取kubeadm join 命令及参数,如下所示
# kubeadm token create 命令的输出,形如:
kubeadm join apiserver.gogogo.com:6443 --token o5vmo9.bazxuhkyew9rajvi --discovery-token-ca-cert-hash sha256:956583e...
### 该 token 的有效时间为 2 个小时,2小时内,您可以使用此 token 初始化任意数量的 worker 节点
2.初始化 worker (只在worker 节点执行)
# 只在 worker 节点执行
# 替换 x.x.x.x 为 master 节点的内网 IP
# export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令
export MASTER_IP=x.x.x.x
# 替换 apiserver.gogogo.com 为 您想要的 dnsName
export APISERVER_NAME= apiserver.gogogo.com
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
3.为了加快速度先在节点上下载镜像
如果不下载会去docker hub 上下时间会非常长
sudo docker pull calico/node:v3.13.1
sudo docker pull calico/pod2daemon-flexvol:v3.13.1
sudo docker pull calico/cni:v3.13.1
sudo docker pull calico/kube-controllers:v3.13.1
4.执行 Master 节点上 token 信息加入集群
# 替换为 master 节点上 kubeadm token create 命令的输出
kubeadm join apiserver.gogogo.com:6443 --token o5vmo9.bazxuhkyew9rajvi --discovery-token-ca-cert-hash sha256:9565...
5.检查初始化结果
在 master 节点上执行(只在Master上)
kubectl get nodes -o wide
*/
9.8 kompose 介绍和说明
在单台机器管理docker容器是怎么管理的?
是用docker-compose来统一管理的,镜像的配置写在docker-compose.yml文件里。
那k8s里面,可以把已经写好的docker-compose.yml文件直接转化为k8s可以使用的文件。这是由kompose工具来实现的。
1.kompose介绍 会写docker-compose.yml文件就可以了。
kompose是一个将docker-compose的yaml文件快速转换成k8s能够部署文件的工具。
如何转化呢?使用条件:
(1)必须有一个已经安装好的k8s集群。
(2)kubectl 命令行工具必须能够连接到搭建好的k8s集群中。 更多参考
# Linux
curl https://github.com/kubernetes/kompose/releases/download/v1.25.0/kompose-linux-amd64 -o kompose
# macOS
curl https://github.com/kubernetes/kompose/releases/download/v1.25.0/kompose-darwin-amd64 -o kompose
chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose
kompose使用命令:
# 把docker-compose.yml文件 转化为 k8s可使用的文件
kompose -f xxx.yml convert
# 把已经转化好的文件部署到k8s中去
kubectl apply -f *.yaml
9.9 kubectl 常用命令讲解
kubectl 常用命令分类:
(1)命令式资源管理 (2)资源查看 (3)容器管理
命令式资源管理
(1)创建:create【创建一个资源】 expose(暴露一个资源)
(2)更新:scale【扩展资源】 label【标签】 annotate【添加备注】
(3)删除 delete(删除资源)
资源查看
(1)get 最常用的查看命令,显示1个或多个的详细信息。
(2)describe describe命令同样用于查看资源信息, 相对于get只输出资源本身的信息, describe聚合了相关资源的信息并输出。
容器管理 (1) log 查看容器的log (2) exec 执行命令 (3) cp 用于从容器与物理机文件的拷贝
kubectl语法
kubectl [command] [type] [name] [flags]
例如:
kubectl get po,svc
kubectl log mysql
kubectl exec -it mysql /bin/bashk8s常用资源的缩写
(1)lng
ingresses的缩写
(2)no
表示集群nodes节点的缩写
(3)ns
namespace命名空间的缩写
(4)rs
replicasets的缩写
(5)svc
代表服务services的缩写
(6)ep
endpoints的缩写
用法例如: