【Kubernetes】k8s 的基本使用指令

图片

今天分享如题:

Kubernetes

 

   

 

最近更新缓慢由于工作太忙惹,忙里偷闲整理愿能与君共勉💪

K8S对我来说是个新的技术栈,程序员就是需要一直充电🔋

加油,一起进步💪

结构模型

k8s 是经典的一对多模型,有一个主要的管理节点master和许多的工作节点slaver。当然,k8s 也可以配置多个管理节点,拥有两个以上的管理节点被称为 高可用。k8s 包括了许多的组件,每个组件都是单运行在一个docker容器中,然后通过自己规划的虚拟网络相互访问。你可以通过kubectl get pod -n kube-system查看所有节点上的组件容器。

在管理节点中会比工作节点运行更多的 k8s 组件,我们就是靠着这些多出来的组件来对工作节点发号施令。他们都叫什么这里就不详细提了。反正对于”基本使用“来说,这些名字并不重要。

理念

要想理解一个东西就要先明白它的内在理念。通俗点就是,k8s 做了什么?为了提供更加可靠的服务,就要增加服务器的数量,减少每个服务器的体量来平摊负载,而越来越多的虚拟机就会带来越来越高的运维成本。如何让少量的运维人员就可以管理数量众多的服务器及其上的服务呢?这就是 k8s 做的工作。

k8s 把数量众多的服务器重新抽象为一个统一的资源池,对于运维人员来说,他们面前没有服务器1、服务器2的概念,而是一个统一的资源池,增加新的服务器对运维人员来说,只是增加自资源池的可用量。不仅如此,k8s 把所有能用的东西都抽象成了资源的概念,从而提供了一套更统一,更简洁的管理方式。

接下来,我会把每个基本命令来逐一进行介绍,并辅以介绍一些基本概念。本文介绍的命令涵盖了增删改查四方面,可参加下面表格,因为篇幅较长,我们将create及之后的不那么常用的命令放在下一篇文章里讲:

命令名类型作用
get列出某个类型的下属资源
describe查看某个资源的详细信息
logs查看某个 pod 的日志
create新建资源
explain查看某个资源的配置项
delete删除某个资源
edit修改某个资源的配置项
apply应用某个资源的配置项

kubectl get 列出资源!

接下来进入正题,首先来了解一下 k8s 中最最最常用的命令kubectl get,要记住,k8s 把所有的东西都抽象成了资源,而kubectl get就是用来查看这些资源的。最常见的资源就是 pod 。

什么是 pod?

pod(豆荚)。pod 的概念其实和docker中的容器非常相似。他是 k8s 中的最小工作单位。你可以把 pod 理解成一个一个的小机器人,而 k8s 抽象出来的大资源池就是他们的工厂。

pod 和 docker 容器的关系?

pod 将一个或多个docker容器封装成一个统一的整体进行管理并对外提供服务。

不仅我们自己的服务是要包装成 pod 的,就连 k8s 自己也是运行在一堆 pod 上。接下来就让我们查看一下 k8s 的 pod :

 

kubectl get pod -n kube-system

-n参数指定了要查看哪个命名空间下的 pod 。k8s 所有的 pod 都被放置在kube-system命名空间下。

什么是命名空间?

命名空间namespace,是 k8s 中”组“的概念,提供同一服务的 pod 就应该被放置同一命名空间下,而不是混杂在一起。k8s 可以用命名空间来做权限控制。如果不指定的话, pod 将被放置在默认的命名空间default下。

执行了kubectl get pod -n kube-system命令后,你就可以看到如下内容:

其中每一行就是一个资源,这里我们看到的资源是 pod 。你看到的 pod 数量可能和我的不一致,因为这个列表里包含了 k8s 在所有节点上运行的 pod ,你加入的节点越多,那么显示的 pod 也就越多。我们来一列一列的看:

NAME:第一列是 pod 的名字,k8s 可以为 pod 随机分配一个五位数的后缀。

READY:第二列是 pod 中已经就绪的 docker 容器的数量,上文中我们提到了,pod 封装了一个或多个 docker 容器。在这里,1/1的含义为就绪1个容器/共计1个容器

STATUS:第三列是 pod 的当前状态,下面是一些常见的状态:

 

状态名含义
Running运行中
Error异常,无法提供服务
Pending准备中,暂时无法提供服务
Terminaling结束中,即将被移除
Unknown未知状态,多发生于节点宕机
PullImageBackOff镜像拉取失败

RESTART:k8s 可以自动重启 pod,这一行就是标记了 pod 一共重启了多少次。

AGE:pod 一共存在了多长时间。

 

  • kubectl get可以列出 k8s 中所有资源

这里只介绍了如何用kubectl获取 pod 的列表。但是不要把getpod绑定在一起,pod 只是 k8s 中的一种服务,你不仅可以get pod,还可以get svc(查看服务)、get rs(查看副本控制器)、get deploy(查看部署)等等等等,虽然说kubectl get pod是最常用的一个,但是如果想查看某个资源而又不知道命令是什么,kbuectl get <资源名>就对了。

如果你想看更多的信息,就可以指定-o wide参数,如下:

 

kubectl get pod -n kube-system -o wide

加上这个参数之后就可以看到资源的所在ip和所在节点node了。

记得加上 -n

-n可以说是kubectl get命令使用最频繁的参数了,在正式使用中,我们永远不会把资源发布在默认命名空间。所以,永远不要忘记在get命令后面加上-n

小结

kubectl get命令可以列出 k8s 中的资源,而kubectl get pod是非常常用的查看 pod 的命令。而-n参数则可以指定 pod 所在的命名空间。

  • kubectl describe 查看详情!

kubectl describe命令可以用来查看某一资源的具体信息,他同样可以查看所有资源的详情,不过最常用的还是查看 pod 的详情。他也同样可以使用-n参数指定资源所在的命名空间。

举个例子,我们可以用下面命令来查看刚才 pod 列表中的某个 pod,注意不要忘记把 pod 名称修改成自己的:

 

kubectl describe pod kube-flannel-ds-amd64-2d6tb -n kube-system

然后你就可以看到很多的信息,咱们分开说,首先是基本属性,你可以在详细信息的开头找到它:

基本属性

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 实例名称Name:           kube-flannel-ds-amd64-2d6tb# 所处命名空间Namespace:      kube-system# 所在节点Node:           worker2/192.168.56.22# 启动时间Start Time:     Wed, 03 Jul 2019 09:31:50 +0000# 标签Labels:         app=flannel                controller-revision-hash=bfc6b6dd4                pod-template-generation=2                tier=node# 注解Annotations:    <none># 当前状态Status:         Running# 所在节点 IPIP:             192.168.56.22# 由那种资源生成 / 控制Controlled By:  DaemonSet/kube-flannel-ds-amd64

其中几个比较常用的,例如NodelabelsControlled By。通过Node你可以快速定位到 pod 所处的机器,从而检查该机器是否出现问题或宕机等。通过labels你可以检索到该 pod 的大致用途及定位。而通过Controlled By,你可以知道该 pod 是由那种 k8s 资源创建的,然后就可以使用kubectl get <资源名>来继续查找问题。例如上文DaemonSet/kube-flannel-ds-amd64,就可以通过kubectl get DaemonSet -n kube-system来获取上一节资源的信息。

内部镜像信息

在中间部分你可以找到像下面一样的Containers段落。该段落详细的描述了 pod 中每个 docker 容器的信息,常用的比如Image字段,当 pod 出现 ImagePullBackOff错误的时候就可以查看该字段确认拉取的什么镜像。其他的字段名都很通俗,直接翻译即可。

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Containers:  kube-flannel:    Container ID:  docker://25d2c4896847bbf53735c57a60c5b3146e2b3a0f86811074bcd28a8291213c18    Image:         quay.io/coreos/flannel:v0.11.0-amd64    Image ID:      docker://sha256:ff281650a721f46bbe2169292c91031c66411554739c88c861ba78475c1df894    Port:          <none>    Host Port:     <none>    Command:      /opt/bin/flanneld    Args:      --ip-masq      --kube-subnet-mgr      --iface=enp0s8    State:          Running      Started:      Wed, 03 Jul 2020 09:31:53 +0000    Ready:          True    Restart Count:  0    Limits:      cpu:     100m      memory:  50Mi    Requests:      cpu:     100m      memory:  50Mi    Environment:      POD_NAME:       kube-flannel-ds-amd64-2d6tb (v1:metadata.name)      POD_NAMESPACE:  kube-system (v1:metadata.namespace)    Mounts:      /etc/kube-flannel/ from flannel-cfg (rw)      /run from run (rw)      /var/run/secrets/kubernetes.io/serviceaccount from flannel-token-fsqdv (ro)

事件

describe查看详情的时候,最常用的信息获取处就是这个Event段落了,你可以在介绍内容的末尾找到它,如下:

 

Events:          <none>

是的,如果你看到上面这样,没有任何Events的话,就说明该 pod 一切正常。当 pod 的状态不是Running时,这里一定会有或多或少的问题,长得像下面一样,然后你就可以通过其中的信息分析 pod 出现问题的详细原因了:

  •  
  •  
  •  
  •  
  •  
  •  
Events:  Type     Reason                  Age                 From              Message  ----     ------                  ----                ----              -------  Normal   Killing                 29m                 kubelet, worker1  Stopping container kube-flannel  Warning  FailedCreatePodSandBox  27m (x12 over 29m)  kubelet, worker1  Failed create pod sandbox: rpc error: code = Unknown desc = failed to create a sandbox for pod "kube-flannel-ds-amd64-9trbq": Error response from daemon: cgroup-parent for systemd cgroup should be a valid slice named as "xxx.slice"  Normal   SandboxChanged          19m (x48 over 29m)  kubelet, worker1  Pod sandbox changed, it will be killed and re-created.  Normal   Pulling                 42s                 kubelet, worker1  Pulling image "quay.io/coreos/flannel:v0.11.0-amd64"

小结

kubectl describe <资源名> <实例名>可以查看一个资源的详细信息,最常用的还是比如kubectl describe pod <pod名> -n <命名空间>来获取一个 pod 的基本信息。如果出现问题的话,可以在获取到的信息的末尾看到Event段落,其中记录着导致 pod 故障的原因。

  • kubectl logs 查看日志!

如果你想查看一个 pod 的具体日志,就可以通过kubectl logs <pod名>来查看。注意,这个只能查看 pod 的日志。通过添加-f参数可以持续查看日志。例如,查看kube-system命名空间中某个flannel pod 的日志,注意修改 pod 名称:

 

kubectl logs -f -n kube-system kube-flannel-ds-amd64-2d6tb

然后就可以看到如下输出:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
E0706 06:55:15.848891       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refusedE0706 06:55:16.948058       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refusedE0706 06:55:17.949165       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refusedE0706 06:55:18.954108       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refusedE0706 06:55:19.955267       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refusedE0706 06:55:21.046592       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refusedE0706 06:55:22.048285       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refusedE0706 06:55:23.147040       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refusedE0706 06:55:24.148350       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refusedE0706 06:55:25.247352       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refusedE0706 06:55:26.248831       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refusedE0706 06:55:27.347224       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refusedE0706 06:55:28.348182       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refusedE0706 06:55:29.350578       1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused...

如果你发现某个 pod 的服务有问题,但是状态还是显示Running,就可以使用kubectl logs来查看其详细日志。

总结

在本篇文章里,我们了解了 k8s 的宗旨和一些基本概念,并知道了最为常用的getdescibelogs命令,知道了这三条命令之后就几乎可以从 k8s 中获取所有常用信息了。

📌上周分享的Kbuernetes跳转地址:

图片

希望我们都能对生活保持热爱❤

以下为之前分享的宝藏内容

 


 

 

我认为资料的价值在于能用、好用,不是满足人的占有欲和获得感。所以,也请各位擦亮双眼,提高标准。得到的同时记得他的价值所在,收获的同时,也请做好择优标准。BTW,学长做的不好的地方,欢迎你们提出来,又或者如果屏幕前的你将更好的资源拿出分享,那真的十分优秀,也希望各位能无私互助。获取资料不强制转发。

希望学长分享的内容对你我都有帮助💪


 

Pandas系列文章

 

图片

 

Pandas系列文章

【技术分析】数据处理工具Pandas 下

【技术分析】数据处理工具Pandas 上

 PART2分享文章

 

  • 【习惯法则】所有的习惯养成都遵循21天法则?

  • 【学长杂谈】积极废人 自救指南

  • 【分享】后厂村鲜为人知的一面

  • 【分享】HI,好久不见的学长

  • 【测试开发】分享测试开发工程师的内心独白

  • 【AI】代码自动补全神器,KITE 

  • 【影视分享】看诺兰新片《信条》前还需要做哪些准备工作

  • 【面试经历】有关于-ByteDance. -01字节奇缘

  • 【面试经验】学长一面百度-经验分享

  • 【学习资源】python课程分享_建议分享+收藏

  • 【夏季八谈】摆摊吧,后浪

 

"生活是苦难的,我又划着我的断桨出发了”

 

 

PS:公号内回复 :学长微信,即可联系到我!

 

 
 
 

觉得内容不错的 欢迎点击「在看」支持 谢谢各位

 

我也希望这个世界会因为分享而更美好!

单纯分享,无任何利益相关!


 

最后分享一下个人博客以及个人摄影网站📷

www.WakeMeUpNow.cn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言 malloc_C语言快速入门——动态内存分配

在前面一系列的字符串操作中&#xff0c;我们都是先定义一个固定大小的字符数组&#xff0c;然后根据所需&#xff0c;或拷贝、或连接、或格式化来为这个数组提供内容。固定大小的数组意味着在程序运行期间&#xff0c;数组所占用的内存是确定的(即划分了固定数量的内存)&#…

【经验分享】工程开发与Coding规范

今天分享分为两部分 :) PART01 工程开发代码规范分享/ PART02 关于某易云自动签到听歌分享- 5Mins DevCoding Rule: PART 1 了解真实工程开发&#x1f3d7;..... 本篇内容分享的宗旨: 学长工作经验之谈仅作分享&#x1f3f7; Ready,Go 代码管理——工具篇 •工程上首先需要…

过滤器与拦截器区别

过滤器与拦截器区别 参考&#xff1a;http://www.cnblogs.com/dreamroute/p/4198087.html?utm_sourcetuicool 过滤器 过滤器是一个程序&#xff0c;它先于与之相关的servlet或JSP页面运行在服务器上。它是随你的web应用启动而启动的&#xff0c;只初始化一次&#xff0c;以后就…

二进制-高效位运算

数独 数独是介绍位运算的好例子&#xff0c;运用位运算和不运用效率差别还是挺大的。我们先看数独需求: 1、当前数字所在行数字均含1-9&#xff0c;不重复 2、当前数字所在列数字均含1-9&#xff0c;不重复 3、当前数字所在宫&#xff08;即3x3的大格&#xff09;数字均含1-9&a…

pytorch resnet50_PyTorch终于能用上谷歌云TPU,推理性能提升4倍,我们该如何薅羊毛?...

晓查 发自 凹非寺量子位 报道 | 公众号 QbitAIFacebook在PyTorch开发者大会上正式推出了PyTorch 1.3&#xff0c;并宣布了对谷歌云TPU的全面支持&#xff0c;而且还可以在Colab中调用云TPU。之前机器学习开发者虽然也能在Colab中使用PyTorch&#xff0c;但是支持云TPU还是第一次…

Android Studio主题设置、颜色背景配置

2019独角兽企业重金招聘Python工程师标准>>> color-themes 效果展示 打开http://color-themes.com/有很多样式可供选择 1. Monokai Sublime Text 3(color theme) 2. Solarized Light (color theme) 3. Visual Studio 2015 Dark(color theme) 导入方式 下载主…

Java多线程实现异步调用

在Java平台,实现异步调用的角色有如下三个角色&#xff1a;调用者、 提货单 、真实数据&#xff0c;一个调用者在调用耗时操作,不能立即返回数据时,先返回一个提货单 .然后在过一断时间后凭提货单来获取真正的数据.去蛋糕店买蛋糕&#xff0c;不需要等蛋糕做出来(假设现做要很长…

sql server 2008 r2卸载重装_免费下载:Intouch软件、Windows操作系统、SQL数据库,VB6.0、C#...

为大家整理了常用的Windows操作系统和安装软件&#xff0c;基本上都是经过我们项目测试OK的版本&#xff0c;以后项目调试就齐全了&#xff0c;不用再“东奔西走”&#xff0c;“小鹿乱撞”了。整理不易&#xff0c;若对您有帮助请关注并转发&#xff0c;以便帮助到更多的人。I…

Android ToolBar 使用完全解析

ToolBar简介 ToolBar是Android 5.0推出的一个新的导航控件用于取代之前的ActionBar&#xff0c;由于其高度的可定制性、灵活性、具有Material Design风格等优点&#xff0c;越来越多的应用也用上了ToolBar&#xff0c;比如常用的知乎软件其顶部导航栏正是使用ToolBar。官方考虑…

【零散积累】传输文件(sz/rz/scp命令)

来自wiki迁移页面路径&#xff1a;刘旺的主页 / 个人零散积累 / 01> 传输文件&#xff08;sz/rz/scp命令&#xff09; 工作中的传输文件会出现在linux之间&#xff0c;或者linux与windows之间。 一、怎么实现linux与windows之间的文件传输&#xff1f; 1.sz和rz是什么 s…

x264_macroblock_cache_load()

功能:完成将已编码数据参数和待编码数据装入到h->mb.cache中,下图是BUF中存储的数据在以MB为单位的时候的存储顺序 x264_macroblock_cache_load( h, i_mb_x, i_mb_y );//是把当前宏块的up宏块和left宏块的intra4x4_pred_mode&#xff0c;non_zero_count加载进来&#xff0c…

生活中常见物联网实例_物联网网关常见问题解答(一)

1.为什么物联网解决方案需要网关&#xff1f;物联网网关弥合了设备&#xff0c;传感器&#xff0c;设备&#xff0c;系统和云之间的通信鸿沟。通过系统地连接云&#xff0c;物联网网关提供了本地处理和存储&#xff0c;并具有基于传感器输入的数据自主控制现场设备的功能。物联…

【零散积累】shell脚本学习

来自wiki迁移页面路径&#xff1a;刘旺的主页 / 个人零散积累 / 03> shell脚本学习 case Shell case语句&#xff08;多分支条件判断&#xff09; $( ) Linux—shell中$(( ))、$( )、与${ }的区别 - chengd - 博客园 在bash中&#xff0c;$( )与 &#xff08;反引号&…

alsa 测试 linux_Electron 构建步骤 (Linux)

遵循下面的引导&#xff0c;在 Linux 上构建 Electron .PrerequisitesPython 2.7.x. 一些发行版如 CentOS 仍然使用 Python 2.6.x &#xff0c;所以或许需要 check 你的 Python 版本&#xff0c;使用 python -V.Node.js v0.12.x. 有很多方法来安装 Node. 可以从 Node.js下载原文…

centos7-安装mysql5.6.36

本地安装了mysql5.7, 但和springboot整合jpa时会出现 hibernateException, 不知道为什么, 换个mysql5.6版本的mysql, 源码安装, cmake一直过不去, 后来改成rpm安装 1, 获取mysql5.6 ftp://ftp.mirrorservice.org/sites/ftp.mysql.com/Downloads/MySQL-5.6/ 下载: 解压: 其中…

github设置中文_静态博客托管图片至 GitHub

从 MWeb 切换到静态博客 Jekyll 之后&#xff0c;我就面临一个问题&#xff0c;这在很久之前使用 Hexo 同样遇过的&#xff1a;图片托管在何处。MWeb 的解决方式很棒&#xff0c;直接插入图片&#xff0c;推送到 Github 后亦能正常引用并显示&#xff0c;无需图床或者借助第三方…

SQL注入【sqli靶场第23-28关】(七)

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 0、总体思路 先确认是否可以SQL注入&#xff0c;使用单…

java linux 调用32位so_Linux上TCP的几个内核参数调优

Linux作为一个强大的操作系统&#xff0c;提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中&#xff0c;笔者积累了一些在内网环境应该进行调优的参数。在此分享出来&#xff0c;希望对大家有所帮助。调优清单好了&#xff0c;在…

H.264码率控制机制

H&#xff0e;264标准码率控制算法步骤如下&#xff1a;1&#xff0e;计算当前帧的目标码字&#xff0c;并将其限定到HRD的边界中。2&#xff0e;通过线性模型(式4&#xff0e;5)预测当前帧中基本单元的MAD。 3&#xff0e;为未编码基本单元分配码字。4&#xff0e;通过二次R&a…

指针结构体函数-事实上能够这样具体理解

今天一大早登了下QQ空间&#xff0c;看到本科的一个学弟发表一篇日志。写关于西电微软俱乐部面试题的解答&#xff0c;写的非常不 错。我也一下子起兴了&#xff0c;由于我以前也是被指针困惑非常久。搞不清头绪&#xff0c;本科到研究生。我也笔试面试不下二十次 了。每次面试…