使用滴滴云进行Kubernetes1.13集群搭建

高可用k8s集群搭建-1.31.1 三主三从高可用kubernetes集群搭建全过程 阅读详情

前言

Kubernetes 1.13 在 2018 年 12 初 GA,这是今年的第四次也是最后一次大版本。此版本继续关注 Kubernetes 的稳定性和可扩展性,其中在存储和群集生命周期领域的三个主要功能实现普遍可用(GA);Kubeadm 简化集群管理、容器存储接口(CSI)和 CoreDNS 作为默认 DNS。

我们用最新的版本来学习,通过使用 Kubeadm 来安装 Kubernetes1.13.0。Kubernetes 的网络要求各节点间可以相互通信,而滴滴云的 VPC 环境是天然的支持。(文末有福利)

1. 目标

第一次安装,我们设一个简单的目标:

  • 完成 Kubernetes 1.13 最简单的安装
  • 可以在集群中部署简单的服务


2. 准备环境

在滴滴云上创建三台 DC2(虚拟机)

其实不用每个 DC2 都申请 EIP,这里为了安装简单,都配置上。(如果部署单机版,则创建一台,其安装区别是单机版安装后,把 master 设置为可以部署应用,下面安装的时候会有提示)

v2-3ce99b2011cb3424e985eb19683f7387_b.png


后面的安装均以 root 用户进行操作,切换到 root,在命令行中 root 用户的提示符为 #,普通用户的为 $

[dc2-user@10-254-165-64 ~]$ sudo -i
[root@10-254-165-64 ~]#

默认情况下滴滴云的 DC2 的防火墙是关着的,这里不用再关闭。如果你的环境开着,先关闭。关闭的方式如下:

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
 
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0


3. 安装

添加 Kubernetes yum 源

[root@10-254-11-44 ~]# 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 安装

[root@10-254-165-64 ~]# yum install -y docker kubelet kubeadm kubectl kubernetes-cni

安装完成后,可以看见下面安装成功的提示:

已安装:
 docker.x86_64 2:1.13.1-53.git774336d.el7.centos kubeadm.x86_64 0:1.13.0-0 kubectl.x86_64 0:1.13.0-0 kubelet.x86_64 0:1.13.0-0
 kubernetes-cni.x86_64 0:0.6.0-0
 
作为依赖被安装:
 container-selinux.noarch 2:2.42-1.gitad8f0f7.el7 container-storage-setup.noarch 0:0.8.0-3.git1d27ecf.el7
 cri-tools.x86_64 0:1.12.0-0 device-mapper-event.x86_64 7:1.02.140-8.el7
 device-mapper-event-libs.x86_64 7:1.02.140-8.el7 device-mapper-persistent-data.x86_64 0:0.7.0-0.1.rc6.el7_4.1
 docker-client.x86_64 2:1.13.1-53.git774336d.el7.centos docker-common.x86_64 2:1.13.1-53.git774336d.el7.centos
 ebtables.x86_64 0:2.0.10-15.el7 libaio.x86_64 0:0.3.109-13.el7
 lvm2.x86_64 7:2.02.171-8.el7 lvm2-libs.x86_64 7:2.02.171-8.el7
 oci-register-machine.x86_64 1:0-6.git2b44233.el7 oci-systemd-hook.x86_64 1:0.1.15-2.gitc04483d.el7
 oci-umount.x86_64 2:2.3.3-3.gite3c9055.el7 skopeo-containers.x86_64 1:0.1.28-1.git0270e56.el7
 socat.x86_64 0:1.7.3.2-2.el7 yajl.x86_64 0:2.0.4-4.el7
 
完毕!
 

安装好后检查一下 Docker和 Kubeadm 版本

[root@10-254-11-44 ~]# docker --version
Docker version 1.13.1, build 774336d/1.13.1
[root@10-254-11-44 ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.0", GitCommit:"ddf47ac13c1a9483ea035a79cd7c10005ff21a6d", GitTreeState:"clean", BuildDate:"2018-12-03T21:02:01Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/amd64"}

启动 Docker 和 Kubelet 服务

[root@10-254-11-44 ~]# systemctl enable docker && systemctl start docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
 
[root@10-254-11-44 ~]# systemctl enable kubelet && systemctl start kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /etc/systemd/system/kubelet.service.

执行 kubeadm config images list 查看安装 Kubernetes 需要哪些依赖

这个操作会卡一会儿,提示 dl.k8s.io 不可达,但是会输出需要的镜像源及对应的版本,这一步可以直接跳过。

[root@10-254-11-44 ~]# kubeadm config images list
...
k8s.gcr.io/kube-apiserver:v1.13.0
k8s.gcr.io/kube-controller-manager:v1.13.0
k8s.gcr.io/kube-scheduler:v1.13.0
k8s.gcr.io/kube-proxy:v1.13.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/coredns:1.2.6

下载依赖包,国内的网络环境下载依赖包比较困难,笔者已经把对应的包同步到 Docker Hub 上面了

docker pull ww3122000/kube-apiserver:v1.13.0
docker pull ww3122000/kube-controller-manager:v1.13.0
docker pull ww3122000/kube-scheduler:v1.13.0
docker pull ww3122000/kube-proxy:v1.13.0
docker pull ww3122000/pause:3.1
docker pull ww3122000/etcd:3.2.24
docker pull ww3122000/coredns:1.2.6
 
docker tag ww3122000/kube-apiserver:v1.13.0 k8s.gcr.io/kube-apiserver:v1.13.0
docker tag ww3122000/kube-controller-manager:v1.13.0 k8s.gcr.io/kube-controller-manager:v1.13.0
docker tag ww3122000/kube-scheduler:v1.13.0 k8s.gcr.io/kube-scheduler:v1.13.0
docker tag ww3122000/kube-proxy:v1.13.0 k8s.gcr.io/kube-proxy:v1.13.0
docker tag ww3122000/pause:3.1 k8s.gcr.io/pause:3.1
docker tag ww3122000/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag ww3122000/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6
 

上面的内容在每个节点上面都执行,下面的在 master 上面执行。


初始化集群
这儿带上参数 --kubernetes-version=v1.13.0 是为了防止以后看教程的时候版本更新了,会安装更新的版本,导致安装失败。使用 --pod-network-cidr=172.16.0.0/12 是为了支持 CNI 网络插件。

[root@10-254-11-44 ~]# kubeadm init --pod-network-cidr=172.16.0.0/12 --kubernetes-version=v1.13.0

看见下面的输出,表示初始化成功了, 输出的结果中的 kubeadm join ... 的内容为以后在 Node 节点上面添加到集群中需要执行的命令。

...
Your Kubernetes master has initialized successfully!
 
To start using your cluster, you need to run the following as a regular user:
 
 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config
 
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
 https://kubernetes.io/docs/concepts/cluster-administration/addons/
 
You can now join any number of machines by running the following on each node
as root:
 
 kubeadm join 10.254.11.44:6443 --token iqq37y.cx5jpycw939zpkfn --discovery-token-ca-cert-hash sha256:15b997b2e6e127b453a96a96476cb0d68c89c82c42c0aa80cd1169e5bbd6af2e

初始化成功后执行正面的命令复制配置文件到 root 用户和普通用户的 home 目录下,以便连上集群使用,执行上面提示中的三行语句

[root@10-254-165-64 ~]# mkdir -p $HOME/.kube
[root@10-254-165-64 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@10-254-165-64 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

添加 Weave 网络插件

[root@10-254-165-64 ~]# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

添加成功后提示:

serviceaccount/weave-net created
clusterrole.rbac.authorization.k8s.io/weave-net created
clusterrolebinding.rbac.authorization.k8s.io/weave-net created
role.rbac.authorization.k8s.io/weave-net created
rolebinding.rbac.authorization.k8s.io/weave-net created
daemonset.extensions/weave-net created

如果是单机版本,则执行下面的命令让 master 可以部署应用

[root@10-254-165-64 ~]# kubectl taint nodes --all node-role.kubernetes.io/master-

如果添加其它节点,则在其它两个 Node 节点上做完 Docker 和 Kubeadm 的安装后 执行添加 Node 命令,添加节点到集群中,下面的内容从上面的 kubeadm init 的结果中查找,然后拷贝运行(切记不要复制教程中的)

[root@10-254-165-64 ~]# kubeadm join 10.254.11.44:6443 --token iqq37y.cx5jpycw939zpkfn --discovery-token-ca-cert-hash sha256:15b997b2e6e127b453a96a96476cb0d68c89c82c42c0aa80cd1169e5bbd6af2e

查看集群中 Node 情况

[root@10-254-11-44 ~]# kubectl get nodes
NAME            STATUS   ROLES    AGE     VERSION
10-254-11-44 Ready    master 9m55s v1.13.0
10-254-203-71 Ready <none> 4m8s v1.13.0
10-254-56-33 Ready <none> 4m5s v1.13.0

到这一步,集群的安装已经完成,下面写两个脚本验证是否可用。


4. 验证 K8s 集群

下面的操作可以使用普通用户来操作 K8s 集群了,一般操作使用普通用户来操作是一个良好的习惯。

通过 ReplicaSet 配置 Tomcat Web 集群

# web-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
 name: web
spec:
 replicas: 2
 template:
 metadata:
 name: web
 labels:
 app: web
 spec:
 containers:
 - name: web
 image: tomcat
 ports:
 - containerPort: 8080

使用 Kubectl 命令创建 ReplicaSet

[dc2-user@10-254-11-44 helloworld]$ kubectl create -f web-rc.yaml
replicationcontroller/web created

查看我们刚部署的两个 Tomcat 的 pod, 刚开始时 pod 的状态可能为 ContainerCreating,使用命令查看,可以看见是在拉取对应的镜像

[dc2-user@10-254-11-44 helloworld]$ kubectl get pods -l app=web
NAME        READY   STATUS              RESTARTS   AGE
web-68s8f 0/1 ContainerCreating 0 43s
web-t9mbh 0/1 ContainerCreating 0 43s

使用命令查看,可以看见是在拉取 Tomcat的镜像:

[dc2-user@10-254-11-44 helloworld]$ kubectl describe pod web-68s8f
Name: web-68s8f
Namespace: default
Priority: 0
PriorityClassName: <none>
Node: 10-254-203-71/10.254.203.71
... 
 
Events:
 Type    Reason     Age   From                    Message
 ---- ------ ---- ---- -------
 Normal  Scheduled 117s default-scheduler       Successfully assigned default/web-68s8f to 10-254-203-71
 Normal  Pulling 116s kubelet, 10-254-203-71 pulling image "tomcat"

过一会儿,拉取完后,可以看见两个 pod 处于运行状态:

[dc2-user@10-254-11-44 helloworld]$ kubectl get pods -l app=web
NAME        READY   STATUS    RESTARTS   AGE
web-68s8f 1/1 Running 0 3m42s
web-t9mbh 1/1 Running 0 3m42s

查看 pod 的 IP,并使用 pod IP 对 Tomcat 进行访问

[dc2-user@10-254-11-44 helloworld]$ kubectl get pods -l app=web -o yaml |grep podIP
 podIP: 10.44.0.2
 podIP: 10.32.0.4
[dc2-user@10-254-11-44 helloworld]$ curl http://10.44.0.2:8080
... 

可以看见输出 tomcat 的欢迎界面的 html

目前只能在服务器上通过 podIP 对服务进行访问,但是我们的 Web 服务肯定是需要向外提供服务的。下面通过创建 Service,对外暴露服务:


创建一个 Tomcat 的 Service 对外暴露服务

Service 的配置中 nodePort: 30303 把服务端口映射到物理机, 同时设置 Service 的 type 为 NodePort, spec.selector 中 app: web 与我们之前创建的 web-rc.yaml 中的 label 一样。

# web-svc-out.yaml
apiVersion: v1
kind: Service
metadata:
 name: web
spec:
 type: NodePort
 ports:
 - port: 8080
 targetPort: 8080
 nodePort: 30303
 selector:
 app: web

创建 Service

[dc2-user@10-254-11-44 helloworld]$ kubectl create -f web-svc-out.yaml
service/web created

查看 Service

[dc2-user@10-254-11-44 helloworld]$ kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S) AGE
web          NodePort 10.106.121.43 <none> 8080:30303/TCP 6m28s

访问服务

在集群中可以使用 集群 IP+ 端口 对服务进行访问:

[dc2-user@10-254-11-44 helloworld]$ curl http://10.106.121.43:8080
<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="UTF-8" />
 <title>Apache Tomcat/8.5.35</title>
 <link href="favicon.ico" rel="icon" type="image/x-icon" />
 <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
 <link href="tomcat.css" rel="stylesheet" type="text/css" />
 </head>
...

在集群外可以通过 DC2 的内/外网 IP 对集群进行访问:

116.85.10.12:30303

116.85.57.121:30303


v2-e6f43f7076f63672f0ab52b184638b6d_b.png


OK, 小目标完成。


5. 总结

  • 在安装填坑的过程中,网络是最大的问题,解决好网络的问题后,其它相对来说都是小问题
  • 在使用 Docker Tag 做 k8s.gcr.io 的包的过程中,不小心把 ETCD 的 image 搞错了,导致安装过程总是不成功,使用 docker save load 方式导出本机的 image 又可用。所以在安装过程中需要非常仔细
  • 多看官网文档

最后,把安装 master 的相关命令,写成了脚本,可以把脚本拷贝到虚机上面默默地看着自动安装:

[root@10-254-165-64 ~]# sh -x init-k8s.sh


本文作者:汪 伟
参考文档:K8s官网

滴滴云-为开发者而生

K8S:Rancher管理 Kubernetes 集群 本文对Rancher介绍:Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,确保集群的安全性,能够管理 k8s 集群。 对对Rancher安装以及配置、登录进入平台后如何操作进行介绍 阅读详情

相关推荐

k8s双节点集群搭建详细教程

title: k8s之集群搭建 category: Docker date: 2019-4-26 typora-root-url: \source_posts\img typora-copy-images-to: \source_posts\img K8S v1.13.0 集群搭建 环境 两台centos主机: Master:192.168.11.112 主机名:k8s-maste...

Mr.Gogh的博客 8049

滴滴2023.11.27P0级故障技术复盘回顾(k8s的的错?)

11 月 27 晚约 10 点,滴滴打车遭遇大范围技术故障。本文从滴滴官方恢复及技术公众号带大家从技术角度复盘这次事故

caoyuan666的博客 4699

VirtualBox + Vagrant + Ansible快速搭建K8s(1.13.0)集群

文章目录VirtualBox + Vagrant + Ansible快速搭建K8s(1.13.0)集群目标开始前准备创建虚拟机群组虚拟机配置参数虚拟机创建主机免密ssh登陆虚拟机搭建K8s集群注册虚拟机创建私有仓库Docker RegisterK8s集群节点准备Master&amp;amp;Worker节点Master节点Worker节点Just GO!!! VirtualBox + Vagrant + ...

KINGSUO2016的博客 2138

真相了,滴滴崩溃竟是因为K8s升级?

大家好,我是不才陈某~11 月 27 日晚上 10 点左右截止 2023 年 11 月 28 日中午 12 点期间,DD发生了长达12小时的p0级bug,造成的影响大家通过各种平台或者亲身经历如何我就不多说了,单说对企业造成的损失超千万单和超4个亿的交易额。我只想说不愧是大企业,这也太狠了简单整理下崩溃原因DD自己在微博上说的是底层系统软件发生故障,身为底层开发的我对此还是挺感兴趣的,所以简单吃了...

码猿技术专栏 693

云原生(二十八) | Kubernetes篇之自建高可用k8s集群搭建

目录自建高可用k8s集群搭建一、所有节点基础环境1、环境准备与内核升级2、安装Docker二、PKI三、证书工具准备1、下载证书工具2、ca根配置3、ca签名请求4、生成证书5、k8s集群是如何使用证书的四、etcd高可用搭建1、etcd文档2、下载etcd3、etcd证书4、etcd高可用安装五、k8s组件与证书1、K8s离线安装包2、master节点准备3、apiserver 证书生成4、front-proxy证书生成5、controller-manage证书生成与配置6、scheduler证书生成与配

Lansonli(蓝深李)的博客 3990

〖Kubernetes指南①〗k8s快速入门|集群搭建

Kubernetes集群的快速搭建

开源项目 rich-agent、biga作者。 1404

滴滴史上最严重故障… k8s背锅?

2023 年 11 月 27 日晚间,滴滴因系统故障导致 App 服务异常,不显示定位且无法打车。11 月 27 日晚,滴滴出行进行了回复:非常抱歉,由于系统故障。2023 年 11 月 28 日早间,滴滴出行消息称,网约车等服务已恢复,骑车等在陆续修复中。11 月 28 日,在滴滴发出公告的同时,记者在上海、深圳等地使用滴滴呼叫网约车,发现网约车功能并未恢复使用,网络加载异常,仍无法打车。11 ...

Java团长的博客 549

MATLAB实战:蓝牙GFSK调制解调全流程解析(附误码率优化技巧)

本文深入解析了蓝牙GFSK调制解调在MATLAB中的全流程实现,包括高斯滤波器设计、调制解调技术及误码率优化技巧。通过实战案例和代码示例,帮助工程师提升蓝牙通信系统的性能表现,特别是在降低误码率方面的有效方法。

weixin_29046035的博客 277

2023.11.27 滴滴P0级故障或为k8s升级造成

最新消息滴滴P0故障原因,是由于k8s集群升级导致的,后面又进行版本回退,由于现在大型互联网公司基本都是基于K8s进行部署的,如果。一出问题,上面运行的业务Pod和运维系统全部都得宕机,导致没法回滚。

seanyang_的博客 1326

实测对比:DJI O3、Walksnail Avatar、HDZero三大高清图传,谁才是低延迟王者?

本文对DJI O3、Walksnail Avatar V2和HDZero三大高清图传系统进行了实测对比,重点分析其在FPV飞行中的低延迟表现。通过专业测试环境和量化数据,揭示HDZero在原生低延迟架构上的优势,DJI O3在画质与延迟间的平衡,以及Walksnail的动态码率调整特点,为不同场景下的选购提供决策依据。

weixin_30756499的博客 444

别再只会调速度了!用STM32的定时器中断精准控制伺服电机转角(避坑指南)

本文详细介绍了如何利用STM32的定时器中断和PWM输出实现伺服电机的精准转角控制,避免常见的速度控制误区。通过硬件配置、脉冲计数逻辑和优化技巧的实战讲解,帮助开发者掌握高精度位置控制方法,适用于工业自动化和机器人控制等场景。

weixin_42531163的博客 414

造成滴滴损失几十个亿的k8s 方案

点击关注公众号:互联网架构师,后台回复2T获取2TB学习资源!上一篇:2T架构师学习资料干货分享大家好,我是互联网架构师!背景从 2023 年 11 月 27 日晚上 10 点左右截止 2023 年 11 月 28 日中午 12 点期间,DD发生了长达12小时的p0级bug,造成的影响大家通过各种平台或者亲身经历如何我就不多说了,单说对企业造成的损失超千万单和超4个亿的交易额。我只想说不愧是大企...

emprere的博客 419

AgentScope Java 2.0 项目实战:从零构建企业级自主Coding Agent

本文基于 AgentScope Java 框架,完整拆解两个生产级 AI Agent 项目的从零开发全过程。其一是企业级自主编码机器人(agentscope-codingagent),支持 Issue→PR 自动实现、PR Code Review、Docker 沙箱隔离执行与多通道接入;其二是个人 AI 助手管理平台(agentscope-paw),采用 Spring Boot + React 全栈架构,支持多 Agent、技能市场与多 IM 通道。

program哲学 836

在滴滴云上学习 Kubernetes v1.13.0:集群搭建

前言 Kubernetes 1.13 在 2018 年 12 初 GA,这是今年的第四次也是最后一次大版本。此版本继续关注 Kubernetes 的稳定性和可扩展性,其中在存储和群集生命周期领域的三个主要功能实现普...

csldnyd1209的博客 119

把 SAP ABAP BDC 跑得又快又稳:从 SHDB 录屏到可上线的批量上传程序(含 MM01 案例与源码)

SAP BDC批量数据迁移实践 摘要:本文介绍了SAP系统中BDC(Batch Data Communication)技术在数据迁移中的应用。文章首先对比了Session method和CALL TRANSACTION method两种实现方式的特点及适用场景,重点推荐使用Session method进行主数据批量处理。然后详细讲解了通过SHDB工具录制MM01事务创建物料主数据的完整流程,包括如何生成基础BDC代码。最后展示了将录制的脚本改造为可批量处理文件数据的实用程序,核心改动包括定义数据结构、读取文

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 322

DA14531之如何Debug(在线调试、Jlink仿真、串口打印)

在线调试和串口打印调试。在线调试是Keil软件配合Jlink编译、烧录、仿真为一体的,其操作包括:运行、停止、打断点,单步运行等。而串口打印调试,只需打开相关配置,让arch_printf()函数正常输出串口数据。若想在初始化完成后打印arch_printf(“goto Loop\r\n”);波特率为115200,接收到串口消息goto Loop。连好线后,点击仿真按钮,在线Jlink调试。

hejinwu1314的博客 1792

Kubernetes入门——从零搭建k8s集群

本文主要介绍了k8s的两种安装方式——kubeadm和rke

日积月累,天道酬勤 3419

把慢点掰开看:在 SAP HANA 中启用 SQL 优化耗时跟踪 SqlOptTime 的实战指南

摘要:SAP HANA 性能排查中,常出现SQL查询时快时慢的现象,表面看似执行问题,实则是编译阶段耗时过长。通过SQL优化跟踪工具SqlOptStep和SqlOptTime,可精准区分编译与执行时间。SqlOptStep展示优化树变化过程,而SqlOptTime则记录各阶段耗时,帮助定位问题根源。启用SqlOptTime需配置traceprofile,建议限定特定用户以减少系统负载。实际案例显示,报表响应慢常由计算视图编译(CeQo)导致,而非执行阶段问题。解决方案包括调整计算视图展开方式或优化基础视图结

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1006

Docker & kubernetes(k8s) 集群搭建

文章目录kubernetes介绍:kubernetes组件:kubernetes安装:kubernetes集群搭建:1.管理节点初始化2. 开启kubelet服务,加入集群3.创建普通用户,进行集群管理4. 网络配置可视化插件网页登陆: kubernetes介绍: kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化...

dddxxy的博客 8573

QGIS003:【02标注工具栏】-标注的样式、放置和属性修改

摘要:文本介绍了QGIS标注的样式、放置和属性修改

qq_31762031的博客 1917

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

在k8s上搭建mongodb集群

之前在k8s上搭建的mongo集群,总是需要在pod新建好之后,再连上去执行命令在多个pod间建立联系。本想着要不要写一个东西一起放进pod里面去代替最后那步手动操作,但上github上一搜发现已经有老哥完成了这个工具了。 以下是用到的两个k8s配置: statefulset.yaml apiVersion: apps/v1beta1 kind: StatefulSet metadata: namespace: service name: mongo spec: selector:

dlm_bk的博客 3769

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

二、Kubernetes (k8s) 内网集群的搭建详细图解

一、环境准备 由于k8s 集群比较吃配置, 建议使用 “按量计费” 来进行学习与测试,三台 4核8G 的费用大概再 1.6元 /小时, 还是比较便宜的(具体操作请看:云服务器购买按量付费实例,并搭建私有网络图解)。如果想购买服务器,可以看下这个, 一年也就168,配置很高,更划算!!【腾讯云】云产品限时秒杀,爆款2核4G云服务器,首年168元 三台云服务器、配置:4核8G 三台服务器内网互通(内网可以互相访问 VPC) 系统:CentOS 8.0 每台机器都设置成不同的hostname .....

胖太乙 6294

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

使用Kubeadm(1.13+)快速搭建Kubernetes集群

Kubeadm是管理集群生命周期的重要工具,从创建到配置再到升级,Kubeadm处理现有硬件上的生产集群的引导,并以最佳实践方式配置核心Kubernetes组件,以便为新节点提供安全而简单的连接流程并支持轻松升级。随着Kubernetes 1.13 的发布,现在Kubeadm正式成为GA。

2401_86940371的博客 1234

使用kubeadmin部署k8s集群

Kubernetes基于容器的应用部署、维护和滚动升级;负载均衡和服务发现;跨机器和跨地区的集群调度;自动伸缩;无状态服务和有状态服务;广泛的Volume支持;插件机制保证扩展性;Borg是谷歌内部的大规模集群管理系统,负责对谷歌内部很多核心服务的调度和管理。Borg的目的是让用户能够不必操心资源管理的问题,让他们专注于自己的核心业务,并且做到跨多个数据中心的资源利用率最大化。BorgMaster是整个集群的大脑,负责维护整个集群的状态,并将数据持久化到Paxos存储中;

Recool7的博客 1727

三、公网环境搭建Kubernetes (k8s) 集群的详细图解

上一节介绍了 Kubernetes (k8s) 内网集群的搭建详细图解 ,也介绍了云服务器按量付费的租赁方式,但是这种方式有点不好之处就是,每次停机重启之后 , IP地址就变了,导致XShell 连接工具每次要改IP, 很是麻烦, 好在我这个人比较能薅羊毛,于是在腾讯云, 百度云, 阿里云上面都薅了一波羊毛。【想薅羊毛看这里:“羊毛”】。所以趁着休息,将手头的几台云服务器搭建成 k8s 集群,由于这几台云服务属于不同的云服务厂商,无法搭建局域网环境的 k8s 集群,故笔者搭建的是公网环境的 k8s 集群。我

胖太乙 5596
上一篇: Qemu 中 Bitmap 的应用
下一篇: Java8 异步编程—CompletableFuture
「已注销」
博客等级 码龄6年 395粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值