k8s快速入门

目录

K8S的目标

K8S是啥

容器如何管理?

pod是啥?

举例

Pause容器

K8S核心组件介绍

ReplicationController:副本控制器

ReplicaSet:副本控制器

Deployment

HPA

StatefullSet

DaemonSet

Label

服务发现

集群安装

操作

前提 

K8s命令分三类

常用命令(master节点)

举例1:创建pod,pod里运行一个tomcat容器

举例2:对上面的pod进行扩容

举例3:彻底删除上面的pod

举例4:创建service

结尾


K8S的目标

降低运维成本

注:学习k8s之前一定要熟练使用docker。

K8S是啥

一种容器管理技术。

容器如何管理?

引入pod机制,通过pod来管理容器。

pod是啥?

一个逻辑分组,在pod中存在1个或多个容器,在pod中会部署一组相关的服务为啥要是相关的?为了减少网络开销。pod有自己的主机名、IP地址。pod是k8s能操作的最基本的单位。

举例

我们的系统awp)要部署上线(通过容器),先准备好我们项目的镜像,然后通过k8s来进行管理通过k8s创建pod

我们访问一个master节点(服务器),我们的请求会调度到一个Node节点(linux服务器),创建一个pod(逻辑分组)。我们的项目镜像会在pod里创建一个容器。

注:

  1. node节点有自己的IP,pod有自己的IP,通过镜像创建的容器有自己的IP。
  2. 一个镜像一个服务
  3. 系统如果要集群,就是多个pod的副本

Pause容器

创建pod时会自动创建一个pause容器,其它容器共享pause的存储和网络。

其它容器通过localhost相互访问。

K8S核心组件介绍

ReplicationController:副本控制器

举例:3个pod内都部署了tomcat,就是3个副本,相当于3个tomcat集群。

集群的预期数量由页面或配置文件或命令来指定。

如果一个挂掉,会自动再创建一个,保证服务高可用。

ReplicaSet:副本控制器

本质跟ReplicationController差不多,新版本的K8S建议用ReplicSet取代ReplicationController

区别:

ReplicationController做pod选择器的时候,只支持单选。(筛选pod)

ReplicSet还能支持复选。(筛选pod)

注:pod可以加标签,通过标签进行筛选

Deployment

Deployment为pod和ReplicSet提供了一个声明式定义方法,用来替代ReplicationController

建议使用Deployment来自动管理ReplicSet

可理解为Deployment对ReplicSet进行了一个封装

应用场景:

滚动更新:发布新版本应用的时候,Deployment会重新创建ReplicSet,再由ReplicSet创建新的pod

做到不停机发布新版本程序。

回滚应用:如果发版失败,可以回滚。

举例:如果v2版本不好用,可以迅速回滚到v1版本的程序。

扩容和缩容:增加pod或者删除pod

HPA

监控pod的CPU使用率,如果利用率过高,自动扩容。

StatefullSet

创建集群,就是创建多个pod副本,大部分的服务是无状态的,比如tomcat服务集群。

通过容器部署,适合那些无状态的服务。

无状态:

没有数据需要实时的保留

有状态:

需要实时的数据更新和存储

举例理解:如果集群里的一个服务器抽离出去,再加回来,不影响用户使用的话,就是无状态服务,比如tomcat或nginx,数据库不行,所以数据库服务是有状态服务。

引申:docker容器主要面向无状态服务,可以用来部署项目的应用服务,一般不用来部署数据存储服务。但是有了k8s的StatefullSet组件,docker容器就可以部署有状态服务。

比如:

有序部署→我们审计系统部署,先部署数据库,再部署Redis,再部署应用程序,最后部署nginx

有序删除→先删除nginx,再应用程序,再Redis,最后数据库

DaemonSet

确保每个node都至少存在一个pod

Label

K8s里所有对象都可以打标签(标识),一个资源对象可以定义任意数量标签。实质是一系列的键值对

没有标签,就无法找到一组相关的pod,也就无法实现负载均衡。

标签举例:

版本标签:”release”:”stable”

环境标签:”environment”:”dev”,”environment”:”server”

服务发现

在此不讲

集群安装

在此不讲

操作

前提 

K8s默认是要开机自动启动的

服务器上已经安装了docker,Docker默认开机自启动

K8s命令分三类

陈述式:命令(指令)

陈述式对象配置:命令(指令)+资源配置文件

声明式:编写yaml文件

我只介绍陈述式

常用命令(master节点)

docker ps 看一下docker启动没有

docker images 看一下k8s的镜像有没有

一般会有以下

k8s.gcr.io/kube-apiserver

k8s.gcr.io/kube-proxy

k8s.gcr.io/kube-scheduler

k8s.gcr.io/kube-controller-manager

k8s.gcr.io/kube-etcd

k8s.gcr.io/coredns

k8s.gcr.io/pause

kubectl get node 查看集群节点,看节点是否已经启动

状态正常应该是Ready

kubectl get pod 查看集群运行的pod

kubectl get pod -n kube-system -o wide  查看k8s相关的pod

-n 命名空间,不指定,命名空间默认为default

-o 输出

wide 详细信息

状态为Running,正常

状态为Pending,可能有些依赖还没运行

状态为CrashLoopBackOff,重启

kubectl create -f kube-flannel.yml   创建yaml文件

kubectl apply -f kube-flannel.yml    应用yaml文件,会下载一些组件

在node节点执行

kubeadm join master的ip:端口号 --token xxxxxxx --discovery-token-ca-cert-hash xxxxxxx

加入master节点(加入到集群)

举例1:创建pod,pod里运行一个tomcat容器

实际操作:

在master节点下

kubectl run my-tomcat --image=tomcat --port=8080

执行后正常应该显示deployment.apps/my-tomcat created

再执行kubectl get pod -o wide看一下状态,也顺便看一下运行在集群的哪个节点

kubectl get rs  正常应该显示my-tomcat-xxxxx .....

kubectl get deployment  正常应该显示my-tomcat .....

结合Deployment组件介绍的那张图来执行命令

注:

这个my-tomcat是deployment的名称

没有指定pod副本数量,默认只创建一个pod副本

镜像会被放到某个节点下,这样很low,应该有统一的镜像仓库

kubectl run my-tomcat --image=tomcat:v2 --port=8080 --replicas=3

使用v2版本的tomcat镜像,创建3个副本

举例2:对上面的pod进行扩容

kubectl scale deployment my-tomcat --replicas=3   把pod扩展为3个副本

注:直接删除任意一个pod副本是删除不了的,又会自动创建出来

举例3:彻底删除上面的pod

kubectl delete deployment my-tomcat

注:如果没有自动删除rs和pod,手动再删除一下rs和pod

举例4:创建service

kubectl expose deployment/my-tomcat --port=30000 --target=8080  同时会产生一个yaml文件

kubectl get svc -o wide  查看service

kubectl edit svc/my-tomcat  编辑刚才创建的yaml文件

把type由ClusterIP改为NodePort,意思是说把30000这个端口映射到物理机上

再执行一下kubectl get svc,看一下冒号后面那个端口号

IP加上这个端口号,就能用浏览器访问了。

结尾

此文章内容只是我学习k8s的一个粗略总结,各种细节无法涉及,希望对大家有所帮助。也希望大家能指出我的问题。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值