kubernetes入门实践

2023-05-16

k8s中文文档

  • k8s概念比较多,有什么概念的疑惑的推荐看k8s中文文档。

me的环境

  • 操作系统:centos7
  • docker:1.12.6

环境跟me的不一致?不要慌,基本大部分操作都是行的通的。

还慌?那就直接用网页在线版的kubernets吧

kubernets单机版安装部署

kubernetes部署算是有一定门槛的。为了不从入门到放弃,推荐一开始安装单机版作为入门熟悉kubectl指令、了解工作原理。

安装流程,切换成root

# 关闭centos自带的防火墙
$ sudo systemctl disable firewalld
$ sudo systemctl stop firewalld
# 安装etcd和kubernetes软件(会自动安装docker)
$ sudo yum install -y etcd kubernetes

修改两处配置

  • Docker配置文件/etc/sysconfig/docker, OPTIONS=’–selinux-enabled=false –insecure-registry gcr.io’
# Modify these options if you want to change the way the docker daemon runs
OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'
if [ -z "${DOCKER_CERT_PATH}" ]; then
DOCKER_CERT_PATH=/etc/docker
fi
# Do not add registries in this file anymore. Use /etc/containers/registries.conf
# from the atomic-registries package.
#
# docker-latest daemon can be used by starting the docker-latest unitfile.
# To use docker-latest client, uncomment below lines
#DOCKERBINARY=/usr/bin/docker-latest
#DOCKERDBINARY=/usr/bin/dockerd-latest
#DOCKER_CONTAINERD_BINARY=/usr/bin/docker-containerd-latest
#DOCKER_CONTAINERD_SHIM_BINARY=/usr/bin/docker-containerd-shim-latest
  • Kubernetes apiservce配置文件/etc/kubernetes/apiserver,把–admission_control参数钟的ServiceAccount删除
###
# kubernetes system config
#
# The following values are used to configure the kube-apiserver
#
# The address on the local server to listen to.
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
# The port on the local server to listen on.
# KUBE_API_PORT="--port=8080"
# Port minions listen on
# KUBELET_PORT="--kubelet-port=10250"
# Comma separated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
# Address range to use for services
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
# default admission control policies
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
# Add your own!
KUBE_API_ARGS=""

启动所有服务

# systemctl start etcd
# systemctl start docker
# systemctl start kube-apiserver
# systemctl start kube-controller-manager
# systemctl start kube-scheduler
# systemctl start kubelet
# systemctl start kube-proxy

初入门小实例

  • 部署nginx服务

    $ kubectl run my-nginx --image=nginx --port=80
    $ kubectl get pod # 查看pod

发现pod状态无论多久都是处于pending。READY字段一直是0/1,服务部署失败的原因是”中国墙“的问题导致无法下载pod启动时需要的谷歌镜像,所以我们得间接的创建所需的镜像。

补充: Pending状态表示API Server已经创建Pod,但Pod内还有一个或者多个容器没有创建,或者正在下载镜像的过程。详细的参考Pod声明周期和重启策略

  • 创建gcr.io/google_containers/pause-amd64:3.0镜像

    $ docker pull googlecontainer/pause-amd64:3.0
    $ docker tag googlecontainer/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0

kubernets指令

  • 实例流程
# 查看版本
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"269f928217957e7126dc87e6adfa82242bfe5b1e", GitTreeState:"clean", BuildDate:"2017-07-03T15:31:10Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"269f928217957e7126dc87e6adfa82242bfe5b1e", GitTreeState:"clean", BuildDate:"2017-07-03T15:31:10Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
# 显示集群信息
$ kubectl cluster-info
Kubernetes master is running at http://localhost:8080
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
# 查看集群中有几个Node
$ kubectl get nodes
NAME STATUS AGE
127.0.0.1 Ready 18h
# 运行一个镜像
$ kubectl run my-nginx --image=nginx --replicas=2 --port=80
deployment "my-nginx" created
# 查看pod
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-379829228-cwlbb 0/1 ContainerCreating 0 20s
my-nginx-379829228-czk6w 1/1 Running 0 20s
# 查看服务详情信息
$ kubectl describe pod my-nginx-379829228-cwlbb
# 查看已部署
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-nginx 2 2 2 2 3m
# 删除pod
$ kubectl delete pod my-nginx-379829228-cwlbb
pod "my-nginx-379829228-cwlbb" deleted
# 再次查看pod,发现由于replicas机制,pod又生成一个新的
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-379829228-czk6w 1/1 Running 0 11m
my-nginx-379829228-gjd7d 0/1 ContainerCreating 0 5s
# 删除部署的my-nginx服务。彻底删除pod
$ kubectl delete deployment my-nginx
deployment "my-nginx" deleted

对比docker命令

k8s的学习路线基本都是从docker[容器]到k8s的,因此两个对比理解有助于记忆

# docker run
$ docker run -d -e DOMAIN=cluster --name my-nginx -p 80:80 nginx
$ kubectl run my-nginx --image=nginx --port=80 --env="DOMAIN=cluster"
# docker ps
$ docker ps
$ kubectl get pods
# docker exec
$ docker exec [容器id] ls
$ kubectl exec [pod_id] ls
# docker exec 交互式
$ docker exec -it [容器id] /bin/sh
$ kubectl exec -it [pod_id] -- /bin/sh
# docker info
$ docker info
$ kubectl cluster-info

重要名词

名词翻译
Namespace命名空间
Endpoint服务端点
Controller Manager管理控制中心
Replication副本控制器

yaml文件管理服务

  • 用yaml文件来创建服务

    # vi nginx.yaml
    piVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: my-nginx
    spec:
    replicas: 3
    template:
    metadata:
    labels:
    app: nginx
    spec:
    containers:
    - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
  • 启动管理服务

    # 根据yaml文件创建服务
    $ kubectl create -f nginx.yaml
    deployment "my-nginx" created
    # 查看deployment
    $ kubectl get deployments
    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
    my-nginx 3 3 3 3 6s
    # 查看Pod
    $ kubectl get pod
    NAME READY STATUS RESTARTS AGE
    my-nginx-4087004473-dtrjp 1/1 Running 0 7s
    my-nginx-4087004473-jz80p 1/1 Running 0 7s
    my-nginx-4087004473-wh576 1/1 Running 0 7s
    # 根据yaml文件删除服务
    $ kubectl delete -f nginx.yaml
    deployment "my-nginx" deleted
    $ kubectl get pod
    No resources found.
    $ kubectl get deployment
    No resources found.

Service

  • 到此,我们部署一个nginx服务

    $ kubectl run my-nginx --image=nginx --port=80
    # 创建一个service 且将其暴露到集群外可供访问
    $ kubectl expose deployment/my-nginx --type="NodePort" --port 80
    service "my-nginx" exposed
    # 此时service列表多个my-nginx服务
    $ kubectl get services
    NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    kubernetes 10.254.0.1 <none> 443/TCP 7d
    my-nginx 10.254.255.103 <nodes> 80:32589/TCP 7s

宿主主机内访问该服务

$ kubectl describe service/my-nginx
# 显示的字段有Endpoints: 172.17.0.2:80
$ curl 172.17.0.2.80

Alt text

同网段的机器访问该服务

$ curl 192.168.33.101:32589

deployments

# 运行nginx镜像
$ kubectl run my-nginx --image=nginx --port=80
# 交互式 shell 的方式运行 pod
$ kubectl run -i --tty my-nginx --image=nginx --port=80 -- sh
# 链接到运行中的容器
$ kubectl attach my-nginx-532658988-10kxd -i
# 查看deployment
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-nginx 1 1 1 1 25m
# 扩展10个副本
$ kubectl scale deployment my-nginx --replicas=10
deployment "my-nginx" scaled
$ kubectl scale deployment/my-nginx --replicas=10 # 作用效果等同上一条命令
deployment "my-nginx" scaled
# 再次显示deployment
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-nginx 10 10 10 1 26m
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-379829228-38hkg 1/1 Running 0 5m
my-nginx-379829228-7j15l 1/1 Running 0 31m
my-nginx-379829228-c8mt3 1/1 Running 0 5m
my-nginx-379829228-f6mm8 1/1 Running 0 5m
my-nginx-379829228-q1rj0 1/1 Running 0 5m
my-nginx-379829228-qg7lf 1/1 Running 0 5m
my-nginx-379829228-rjfbq 1/1 Running 0 5m
my-nginx-379829228-v581r 1/1 Running 0 5m
my-nginx-379829228-wh49w 1/1 Running 0 5m
my-nginx-379829228-wpn98 1/1 Running 0 5m
# 缩扩到1个副本
$ kubectl scale deployment/my-nginx --replicas=1
deployment "my-nginx" scaled
$ kubectl scale deployment my-nginx --replicas=1 # 作用效果等同上一条命令

deployment的更新回滚

Alt text

$ kubectl create -f nginx.yaml
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
my-nginx-4087004473-4xj74 1/1 Running 0 3m
my-nginx-4087004473-jkptq 1/1 Running 0 3m
my-nginx-4087004473-m55s1 1/1 Running 0 3m
$ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-nginx 3 3 3 3 4m
# 更新应用的镜像从1.7.9版本——>1.9.1
$ kubectl set image deployment/my-nginx nginx=nginx:1.9.1
deployment "my-nginx" image updated
# 确认是否更新成功
$ kubectl rollout status deployment/my-nginx
deployment "my-nginx" successfully rolled out
# 回滚到上一代版本
$ kubectl rollout undo deployment/my-nginx
deployment "my-nginx" rolled back

ConfigMap-容器应用的配置管理

应用部署的一个最佳实践是将应用所需配置信息和程序进行分离,一则程序可以更好的复用,二则能灵活的更改配置从而实现其他功能。

使用configMap替代环境变量

以yaml文件方式创建ConfigMap

# vi special-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
special.how: very
special.type: charm
# vi env-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: env-config
namespace: default
data:
log_level: INFO

可以在Pod中这样使用ConfigMap

# vi configMap.yaml
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: nginx
command: [ "/bin/sh", "-c", "env" ]
env:
- name: SPECIAL_LEVEL_KEY #定义环境变量名称
valueFrom: #key"special.how"对应的值
configMapKeyRef:
name: special-config #环境变量的值
key: special.how
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: special.type
restartPolicy: Never

启动等一系列操作

$ kubectl create -f special-config.yaml
configmap "special-config" created
$ kubectl create -f env-config.yaml
configmap "env-config" created
# 查看ConfigMap
$ kubectl get configmaps
NAME DATA AGE
env-config 1 38m
special-config 2 39m
# 让我们看一下创建的ConfigMap
$ kubectl describe configmap env-config
Name: env-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
log_level: 4 bytes
# 查看ConfigMap键的值
$ kubectl get configmaps env-config -o yaml
apiVersion: v1
data:
log_level: INFO
kind: ConfigMap
metadata:
creationTimestamp: 2017-11-30T07:29:49Z
name: env-config
namespace: default
resourceVersion: "285268"
selfLink: /api/v1/namespaces/default/configmaps/env-config
uid: 3f473adf-d5a0-11e7-9830-0800275ae9e7

$ kubectl create -f configMap.yaml
pod "dapi-test-pod" created
# 查看pod,状态ContainerCreating
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
dapi-test-pod 0/1 ContainerCreating 0 3s
# 隔一段时间再查看pod,发现并没有返回什么
$ kubectl get pod
# 显示所有的权限查看pod
$ kubectl get pod --show-all
NAME READY STATUS RESTARTS AGE
dapi-test-pod 0/1 Completed 0 1m
# 查看详情
$ kubectl describe pod dapi-test-pod
Name: dapi-test-pod
Namespace: default
Node: 127.0.0.1/127.0.0.1
Start Time: Thu, 30 Nov 2017 15:32:00 +0800
Labels: <none>
Status: Succeeded
IP:
Controllers: <none>
Containers:
test-container:
Container ID: docker://1ba533f43ee60c02e03dafb7bcb8495fc12264aaab229872df0b289a3c1b9976
Image: nginx
Image ID: docker-pullable://docker.io/nginx@sha256:b81f317384d7388708a498555c28a7cce778a8f291d90021208b3eba3fe74887
Port:
Command:
/bin/sh
-c
env
State: Terminated
Reason: Completed
Exit Code: 0
Started: Thu, 30 Nov 2017 15:32:25 +0800
Finished: Thu, 30 Nov 2017 15:32:25 +0800
Ready: False
Restart Count: 0
Volume Mounts: <none>
Environment Variables:
SPECIAL_LEVEL_KEY: <set to the key 'special.how' of config map 'special-config'>
SPECIAL_TYPE_KEY: <set to the key 'special.type' of config map 'special-config'>
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
No volumes.
QoS Class: BestEffort
Tolerations: <none>
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
3m 3m 1 {default-scheduler } Normal Scheduled Successfully assigned dapi-test-pod to 127.0.0.1
3m 3m 1 {kubelet 127.0.0.1} spec.containers{test-container} Normal Pulling pulling image "nginx"
3m 2m 2 {kubelet 127.0.0.1} Warning MissingClusterDNS kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.
2m 2m 1 {kubelet 127.0.0.1} spec.containers{test-container} Normal Pulled Successfully pulled image "nginx"
2m 2m 1 {kubelet 127.0.0.1} spec.containers{test-container} Normal Created Created container with docker id 1ba533f43ee6; Security:[seccomp=unconfined]
2m 2m 1 {kubelet 127.0.0.1} spec.containers{test-container} Normal Started Started container with docker id 1ba533f43ee6
# 可知container started 成功,进一步查看日志
$ docker logs 1ba
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.254.0.1:443
MY_SERVICE_PORT_80_TCP=tcp://10.254.110.249:80
MY_SERVICE_PORT_443_TCP_ADDR=10.254.110.249
HOSTNAME=dapi-test-pod
MY_SERVICE_PORT_443_TCP_PORT=443
HOME=/root
MY_SERVICE_PORT_443_TCP_PROTO=tcp
MY_SERVICE_SERVICE_PORT_HTTP=80
SPECIAL_TYPE_KEY=charm
MY_SERVICE_SERVICE_PORT_HTTPS=443
MY_SERVICE_PORT_443_TCP=tcp://10.254.110.249:443
MY_SERVICE_SERVICE_HOST=10.254.110.249
KUBERNETES_PORT_443_TCP_ADDR=10.254.0.1
NGINX_VERSION=1.13.7-1~stretch
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
NJS_VERSION=1.13.7.0.1.15-1~stretch
KUBERNETES_PORT_443_TCP_PROTO=tcp
MY_SERVICE_SERVICE_PORT=80
MY_SERVICE_PORT=tcp://10.254.110.249:80
SPECIAL_LEVEL_KEY=very
MY_SERVICE_PORT_80_TCP_ADDR=10.254.110.249
KUBERNETES_PORT_443_TCP=tcp://10.254.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.254.0.1
MY_SERVICE_PORT_80_TCP_PORT=80
PWD=/
MY_SERVICE_PORT_80_TCP_PROTO=tcp

ConfigMap的限制条件

  • ConfigMap必须在Pod之前创建才能被使用。
  • ConfigMap可以定义其属于哪个Namspece,只有在同一个Namespace中的pod才能引用。

删除Pod

  • 有时候deployment、rs、rc、services都为0,但是Pod确存在着。则重启kubelet服务即可。
$ systemctl restart kubelet

补充

# 列出当前节点名
kubectl get node
NAME STATUS AGE
127.0.0.1 Ready 6d
# 已知当前节点名为127.0.0.1,用如下命令即可获得该节点上所有运行节点
$ curl localhost:8080/api/v1/proxy/nodes/127.0.0.1/pods
{"kind":"PodList","apiVersion":"v1","metadata":{},"items":null}

报错

$ sudo kubectl create -f file.yaml
YAML error: found character that cannot start any token
# or
error:yaml: line 15: found a tab character that violate indentation
#file.yaml不可用tab键来空格
$ sudo kubectl create -f mysql-rc.yaml
error: error validating "mysql-rc.yaml": error validating data: [found invalid field app for v1.ObjectMeta, found invalid field value for v1.Container]; if you choose to ignore these errors, turn validation off with --validate=false
---------------------
# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default my-nginx-379829228-b796w 1/1 Running 0 12m
kube-system kubernetes-dashboard-2397086622-46tvx 0/1 ContainerCreating 0 8s
[root@node01 ~]# kubectl logs -f kubernetes-dashboard-2397086622-46tvx --namespace=kube-system
Using HTTP port: 9090
Using apiserver-host location: http://127.0.0.1:8080
Creating API server client for http://127.0.0.1:8080
Error while initializing connection to Kubernetes apiserver. This most likely means that the cluster is misconfigured (e.g., it has invalid apiserver certificates or service accounts configuration) or the --apiserver-host param points to a server that does not exist. Reason: Get http://127.0.0.1:8080/version: dial tcp 127.0.0.1:8080: getsockopt: connection refused
Refer to the troubleshooting guide for more information: https://github.com/kubernetes/dashboard/blob/master/docs/user-guide/troubleshooting.md
我们最好不要越过RC而直接创建Pod,因为Replication Controller会通过RC管理Pod副本。实现自动创建、补足、替换、删除Pod副本,大大提高系统的容灾能力
  • 重新调度(Rescheduling)
  • 弹性伸缩(Scaling)
  • 滚动更新(Rolling Updates)

转载于:https://www.cnblogs.com/huangzhenyou/p/8066145.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubernetes入门实践 的相关文章

  • js特效代码-onmouseover/onclick 改变标签(背景)颜色

    lt html gt lt head gt lt meta http equiv 61 34 Content Type 34 content 61 34 text html charset 61 gb2312 34 gt lt title
  • 利用Sphinx编写文档

    利用Sphinx编写文档 1 Sphinx简介和使用理由 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 Sphinx是一个用Python语言编写而成的文档编写工具 用Sphinx编写文
  • 通讯技术

    串口通讯基础 串口基本接线方法 xff08 作者 xff1a 龚建伟 2001 6 24 xff09 本文介绍了串口常用接线方法及注意事项 有关RS232与RS485接口的问答 来自中国工控网 xff09 RS232与RS485接口的区别及
  • microsoft微软登录新账户/切换账户失败,一直转圈,提示“你似乎没有连接到internet”

    无论有没有微软账户 xff0c 是切换账户还是新电脑登录 xff0c 原理都是一样的 xff0c 先使用一个账号注册 登录 设置好微软账户 xff0c 然后再进行你原本的操作 在可以进入到桌面并且联网的情况下 xff0c 登录不上微软账户的
  • 如何改善GPS的漂移?

    GPS飘移一直以来都是令用户和厂家比较头疼的问题 xff0c 也是很多用户选择GPS的首选指标 xff0c 好的产品定位精准 xff0c 漂移很小 xff0c 那么如何改善GPS的漂移 xff1f 1 xff09 纯软件方法 通过软件滤波算
  • Proteus仿真与实际的差别

    最近刚做好一个站 xff0c 基于rails 3 xff0c 教程为主 xff0c 大家捧场看看 xff0c 谢谢 xff01 www yo945 com 弄了几天的Proteus仿真 xff0c 终于觉得自己想做的东西 xff0c 已经全
  • 串口调试助手-打开报错

    问题 xff1a 串口调试助手sscom33打开报错 xff0c 报错信息如下图 解决方法 xff1a 1 将串口设备连接到电脑 1 xff09 若是台式机 xff0c 则直接用串口线连接电脑和串口设备 2 xff09 若是笔记本电脑 xf
  • 基于变分自编码器(VAE)利用重建概率的异常检测

    本文为博主翻译自 xff1a Jinwon的Variational Autoencoder based Anomaly Detection using Reconstruction Probability xff0c 如侵立删 http d
  • 让Eclipse的自动提示更加智能

    ddd在Eclipse MyEclipse的默认设置中 xff0c 只有输入一个点号后才自动提示 xff0c 不太友好 xff0c 我们把他修改一下 xff0c 只要输入字母就有提示 Windows Preferences Java Edi
  • 驱动的本质

    驱动的本质 参考 xff1a www zhihu com question 33 2 驱动程序的本质 xff01 CPU要与IO模块传送数据 xff0c 要编程 xff0c 这个与IO模块传送数据的程序就是 34 驱动程序 34 驱动程序的
  • c语言中变量/函数命名以单下划线(_)和双下划线(__) 开头的意义

    以单下划线 xff08 xff09 表明是标准库的变量 双下划线 xff08 xff09 开头表明是编译器的变量 建议自己在命名的时候不要用下划线开头 xff0c 避免与标准库中的命名冲突 命名方法有好多 xff0c 何必为自己找不自在呢
  • PADS9.5 原理图和封装制作——以STM32F103为例

    1 进入元件编辑有两种方法 xff0c 第一种 xff1a 文件 库 第二种 xff1a 工具 元件编辑器 2 选定你要保存的库 xff0c 选择元件 xff0c 按新建按钮 3 选择下面按钮进入编辑界面 xff0c 如果是建的新库里面没有
  • 转载:Pixhawk源码笔记一:APM代码基本结构

    转自 新浪微博 64 WalkAnt 基础知识 详细参考 xff1a http dev ardupilot com wiki learning the ardupilot codebase 第一部分 xff1a 介绍 详细参考 xff1a
  • Python startswith()函数 与 endswith函数

    函数 xff1a startswith 作用 xff1a 判断字符串是否以指定字符或子字符串开头 一 函数说明 语法 xff1a string startswith str beg 61 0 end 61 len string 或strin
  • [C++]Leetcode超高效刷题顺序及题目详解笔记(持续更新中)

    一 前言 博主最近在LeetCode上用C 43 43 练习 一路走来踩过一些坑 xff0c 做了一些总结和笔记 xff0c 分享给需要的人 LeetCode中文版 xff1a https leetcode cn com 二 介绍 Leet
  • Win10加装SSD固态硬盘后卡顿现象的解决方法

    现象 xff1a 1 不定期出现卡顿 xff0c 或开机直接卡顿 xff0c 移动鼠标一下一下卡顿 xff0c 听歌曲看视频亦是一下一下卡顿 xff0c 非假死或死机 2 硬盘占用率正常 xff0c CPU占用率正常 xff0c 内存占用率
  • PX4/Pixhawk---高速成为开发人员(Windows)

    1 高速成为开发人员新手教程 xff08 翻译 xff09 官方 1 1 编译环境之版本号控制系统 xff08 1 xff09 安装 MSysGIT 安装完毕后 xff0c 配置GIT 安装注意 安装过程中除了以下一步外 xff0c 其它的
  • iOS 变量名前为什么要加_下划线

    简单来说 xff0c 含有两个下划线和下划线 43 大写字母开头的标识符是给编译器和标准库用的 xff0c 你不能用 xff0c 否则后果自负 一个下划线开头的随便用 xff0c 只要你不嫌麻烦 而我们一般在前面加 表示私有变量 一般来说
  • VINS-mono详细解读

    VINS mono详细解读 极品巧克力 前言 Vins mono是香港科技大学开源的一个VIO算法 xff0c https github com HKUST Aerial Robotics VINS Mono xff0c 是用紧耦合方法实现
  • 从阿里到微店

    从阿里到微店 标签 xff1a 程序人生 在 lt 2 5年 从0到阿里 gt 中提到过 当时面阿里云OS时预期的是进入虚拟机团队 结果后来被分到了高通平台参考设计团队 因此在阿里期间心情一直是比较低落的 写这篇博客主要是基于以下几个原因

随机推荐

  • 旷视研究院Detection组负责人

    http www skicyyu org https zhuanlan zhihu com p 61910297 俞刚 xff0c 旷视研究院Detection组负责人 2014年博士毕业于新加坡南洋理工大学 xff0c 加入旷视 主要负责
  • FIFO队列(First In First Out)和优先队列

    queue lt 类型名 gt q q size 返回队列中元素个数 q empty 若队列为空 xff0c 返回true xff0c 否则返回false q pop 删除队首元素 xff0c 但不返回其值 q front 返回队首元素的值
  • profile, bashrc, source, setup.*sh

    一 source xff1a 命令是使该文件立刻执行 xff0c 这样刚才做的修改就可以立即生效了 xff0c 否则要重新启动系统修改才能生效 执行其后命令使之立即生效 xff0c 不用重启 二 bashrc 1 linux系统 xff1a
  • mysql数据库引擎

    一 innodb 1 支持事务 事务ACID atomicity原子性 consistency一致性 isolation隔离性 durability持久性 A xff1a 事务要么全执行 xff0c 要么全不执行 C xff1a 事务执行前
  • HashMap

    实现Map 存储 lt key value gt 的集合 xff0c 每个键值对叫做Entry HashMap每一个元素的初始值都是Null 1 put方法 1 xff09 需要利用哈希函数来确定Entry的插入位置index 61 Has
  • 华为发布全新AI平台:第三代开发板HiKey 970

    3月19日 xff0c 在香港Linaro开发者大会上 xff0c 华为发布了全球领先的人工智能开发平台 HiKey 970 xff0c 基于全球首个内置NPU神经网络单元的AI移动计算平台麒麟970 xff0c 可提供强大AI算力 支持硬
  • 程序员你写的代码,被爆出黑产了!

    事件经过 看了微博上发表转发1000 43 点赞1000 43 次的吐槽陕西省的普通话成绩查询网站代码的微博 xff0c 后来知乎上又有20万的阅读量这个话题的提问 最终结案这并不是真的陕西省普通话成绩查询网的网址 xff0c 只不过是和官
  • vue 常见的新增、编辑、查看公用同一个页面

    用vue开发经常会碰到 xff0c 一个功能的新增 编辑 查看公用同一个页面 xff0c 如果是页面暂且不提 但是弹框 xff0c 很多人会发现 xff0c 如果是点击编辑 xff0c 取消 xff0c 再点新增 xff0c 弹框上面是会有
  • 关于 sinc函数和rect函数 傅里叶变换的思考

    sinc型和rect型 只要零点确定 Ts 61 a 2 那么带宽是相同的 xff0c B 61 1 a 只是频率概率密度不一样 sinc 函数的频谱是一个矩形 xff0c 也就是说频率概率是一样的 xff1b rect函数的频谱是一个si
  • Revit安装失败怎样卸载重新安装Revit,解决Revit安装失败的方法总结

    技术帖 xff1a Revit没有按照正确方式卸载 xff0c 导致Revit安装失败 楼主也查过网上关于如何解决Revit安装失败的一些文章 xff0c 是说删除几个Revit文件和Revit软件注册表就可以解决Revit安装失败的问题
  • make问题:make[1] entering directory

    make问题 xff1a make 1 entering directory 执行make distclean命令 posted on 2014 07 16 07 48 一生学习 何来毕业 阅读 评论 编辑 收藏 转载于 https www
  • 关于TIA博图V13的超详细WIN10安装教程(STEP 7 V13、wincc V13、PLCSIM)

    博途V13全部 含激活 xff08 STEP 7 V13 wincc V13 PLCSIM xff09 xff1a 百度云盘下载 提取码 xff1a m6ve 注意 注意安装顺序先安装STEP 7 V13 在安装wincc V13 最后在安
  • Dockerfile文件详解

    什么是dockerfile Dockerfile是一个包含用于组合映像的命令的文本文档 可以使用在命令行中调用任何命令 Docker通过读取Dockerfile中的指令自动生成映像 docker build命令用于从Dockerfile构建
  • SCUT - 31 - 清一色 - dfs

    https scut online p 31 还是不知道为什么RE了 的确非常玄学 重构之后就没问题了 果然写的越复杂 xff0c 分的情况越乱就越容易找不到bug code include lt bits stdc 43 43 h gt
  • matlab结构体嵌套结构体,科学网-[MATLAB]方便快捷读取结构体里数个结构体内的数据-胡振东的博文...

    clc clear close all cd F 01 DATA Data process Glide load 39 Glide0 mat 39 Glide0 mat里的Glide结构体有G1 xff0c G2 G11结构体 xff0c
  • 计算所考研复试

    计算所考研复试 本人参加19年计算所考研360 43 xff0c 专业课为863 xff0c 计算所复试分数线为322 quad quad 简单说一下结果吧 xff0c 本科哪里的就不说了 xff0c 成功上岸 xff0c 但不太理想 xf
  • js中的事件委托或是事件代理详解

    起因 xff1a 1 这是前端面试的经典题型 xff0c 要去找工作的小伙伴看看还是有帮助的 xff1b 2 其实我一直都没弄明白 xff0c 写这个一是为了备忘 xff0c 二是给其他的知其然不知其所以然的小伙伴们以参考 xff1b 概述
  • 信息安全政策(等级保护、分级保护)

    等级保护 信息安全等级保护管理办法 将信息系统的安全保护等级分为以下五级 xff1a 第一级 xff0c 信息系统受到破坏后 xff0c 会对公民 法人和其他组织的合法权益造成损害 xff0c 但不损害国家安全 社会秩序和公共利益 第一级信
  • ROS知识(16)----如何编译时自动链接同一个工作空间的其他包的头文件(包含message,srv,action自动生成的头文件)...

    catkin make编译时 xff0c 往往需要自动链接同一个工作空间的其他包的头文件 否则会出现类似如下的错误 xff1a home xx xx ws srcA package src db hpp 13 26 fatal error
  • kubernetes入门实践

    k8s中文文档 k8s概念比较多 xff0c 有什么概念的疑惑的推荐看k8s中文文档 me的环境 操作系统 xff1a centos7docker xff1a 1 12 6 环境跟me的不一致 xff1f 不要慌 xff0c 基本大部分操作