k8s集群环境搭建

2023-11-09

环境规划

集群类型

一主多从

一台master节点和多台node节点,搭建简单,但是有单机故障风险,适合用于测试环境

多主多从

多台master节点和多台node节点,搭建麻烦,安全性高,适合用于生产环境

 为了测试简单,本次搭建的是一主两从类型的集群

安装方式

k8s有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包

  • minikube:一个用于快速搭建单节点的k8s的工具
  • kubeadm:一个用于快速搭建k8s集群的工具
  • 二进制包:从官网下载的每个组件的二进制包,依次去安装,此方式对于理解k8s组件更加有效

现在需要安装k8s集群环境,但又不想过于麻烦,所以选择使用kubeadm的方式

环境搭建

 准备三台centos虚拟机,分别命名为master node1 node2

 虚拟机安装步骤自行百度,注意虚拟机配置至少2核2g内存,不然无法使用k8s集群

使用xshell连接三台虚拟机

配置xshell同时向三台虚拟机输入命令

 改变xshell布局为瓷砖排列

这样我们就能同时向三台虚拟机发送命令,同时观察三台虚拟机的状态了

环境初始化 

检查centos版本

使用k8s集群要求centos版本在7.5及以上,在xshell中输入 

[root@master ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

显示centos版本为7.9,符合要求

 主机名解析

配置三台虚拟机的主机名到ip地址的映射

[root@master ~]# vim /etc/hosts
#在里面添加
你的master虚拟机的ip地址 master
你的node1虚拟机的IP地址 node1
你的node2虚拟机的ip地址 node2

ping主机名查看是否能成功连通

[root@master ~]# ping master
[root@master ~]# ping node1
[root@master ~]# ping node2

如果都能ping通证明没有问题

开启时间同步

kubernetes要求集群中的节点时间必须精确一致,这里直接使用chronyd服务从网络同步时间

启动chronyd服务

[root@master ~]# systemctl start chronyd

设置chronyd服务开机自启

[root@master ~]# systemctl enable chronyd

使用date验证时间

[root@master ~]# date
2021年 06月 30日 星期三 09:51:14 CST

禁用iptables和firewalld服务

注意:这只是开发学习中使用,生产环境中慎重关闭

k8s和docker在运行过程中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

#关闭防火墙
[root@master ~]# systemctl stop firewalld
#设置开机自动关闭防火墙
[root@master ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
#关闭iptables服务
[root@master ~]# systemctl stop iptables
Failed to stop iptables.service: Unit iptables.service not loaded.

禁用selinux

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

[root@master ~]# vim /etc/selinux/config 
#将里面的SELINUX改为disabled
SELINUX=disabled

禁用swap分区

swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用

启用swap设备会对系统的性能产生非常负面的影响,因此k8s要求每个节点都要禁用swap设备

但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

[root@master ~]# vim /etc/fstab
#将swap一行进行注释
#/dev/mapper/centos-swap swap 

修改linux的内核参数

修改Linux的内核参数,添加网桥过滤和地址转发功能

[root@master ~]# vim /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

重新加载配置

[root@master ~]# sysctl -p
#加载网桥过滤模块
[root@master ~]# modprobe br_netfilter
#查看网桥过滤模块是否加载成功
[root@master ~]# lsmod |grep br_netfilter
br_netfilter           22256  0 
bridge                151336  1 br_netfilter

配置ipvs功能

在k8s中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的

两者比较的话,ipvs的性能明显要高一些,但是如果要使用它的话,需要手动载入ipvs模块

安装ipset和ipvsadm

[root@master ~]# yum install ipset ipvsadm -y

添加需要加载的模块写入脚本文件

[root@master ~]# cat <<EOF> /etc/sysconfig/modules/ipvs.modules
> #!/bin/bash
> modprobe -- ip_vs
> modprobe -- ip_vs_rr
> modprobe -- ip_vs_wrr
> modprobe -- ip_vs_sh
> modprobe -- nf_conntrack_ipv4
> EOF

为脚本文件添加权限

[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules 
#执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules

查看对应的模块是否加载成功

[root@master ~]# lsmod |grep -e ip_vs -e nf_conntrack_ipv4
nf_conntrack_ipv4      15053  0 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
ip_vs_sh               12688  0 
ip_vs_wrr              12697  0 
ip_vs_rr               12600  0 
ip_vs                 145458  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          139264  2 ip_vs,nf_conntrack_ipv4
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack

重启服务器

上述步骤完成之后,需要重启Linux系统

[root@master ~]# reboot

查看selinux是否是禁用状态

[root@master ~]# getenforce
Disabled

查看swap分区

[root@master ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         166        1488           9         164        1504
Swap:             0           0           0

安装docker

依旧发送键盘输入的所有会话

切换镜像源

[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

查看当前镜像源中支持的docker版本

[root@master ~]# yum list docker-ce --showduplicates

安装特定版本的docker-ce

#安装时必须指定--setopt=obsoletes=0,否则yum会自动安装更高版本
[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y

添加一个配置文件

docker在默认情况下使用的Cgroup Driver为cgroupfs,而k8s推荐使用systemd来代替cgroupfs

[root@master ~]# mkdir /etc/docker

[root@master ~]# cat <<EOF> /etc/docker/daemon.json
> {
>   "exec-opts":["native.cgroupdriver=systemd"],
>   "registry-mirrors":["https://knOt2bca.mirror.aliyuncs.com"]
> }
> EOF
[root@master ~]# more /etc/docker/daemon.json 
{
  "exec-opts":["native.cgroupdriver=systemd"],
  "registry-mirrors":["https://kn0t2bca.mirror.aliyuncs.com"]
}

启动docker

[root@master ~]# systemctl start docker
[root@master ~]# docker version
Client:
 Version:           18.06.3-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        d7080c1
 Built:             Wed Feb 20 02:26:51 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.3-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       d7080c1
  Built:            Wed Feb 20 02:28:17 2019
  OS/Arch:          linux/amd64
  Experimental:     false

设置docker开机自启动

[root@master ~]# systemctl enable docker

安装kubernetes组件

由于kubernetes的镜像源在国外,这里切换成国内的镜像源

[root@master ~]# vim /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

安装kubeadm、kubelet和kubectl

[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y

配置kubelet的cgroup

[root@master ~]# vim /etc/sysconfig/kubelet 
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

设置kubernets开机自启

[root@master ~]# systemctl enable kubelet

准备集群镜像

在安装kubernetes集群之前,必须提前准备好集群需要的镜像,所需镜像可以通过下面命令查看

[root@node1 ~]# kubeadm config images list
I0630 15:52:58.055686    9125 version.go:251] remote version is much newer: v1.21.2; falling back to: stable-1.17
W0630 15:53:00.822309    9125 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0630 15:53:00.822336    9125 validation.go:28] Cannot validate kubelet config - no validator is available
k8s.gcr.io/kube-apiserver:v1.17.17
k8s.gcr.io/kube-controller-manager:v1.17.17
k8s.gcr.io/kube-scheduler:v1.17.17
k8s.gcr.io/kube-proxy:v1.17.17
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5

【文章福利】:C/C++Linux服务器开发/后台架构师【公开课学习】(C/C++,Linux,golang技术,内核,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg,大厂面试题 等)有需要的可以点击793599096加群领取哦~

下载镜像

[root@master ~]# images=(
 kube-apiserver:v1.17.17
 kube-controller-manager:v1.17.17
 kube-scheduler:v1.17.17
 kube-proxy:v1.17.17
 pause:3.1
 etcd:3.4.3-0
 coredns:1.6.5
)

[root@master ~]# for imageName in ${images[@]};do
   docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
   docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
   docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done

查看镜像

[root@master ~]# docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                v1.17.17            3ef67d180564        5 months ago        117MB
k8s.gcr.io/kube-apiserver            v1.17.17            38db32e0f351        5 months ago        171MB
k8s.gcr.io/kube-controller-manager   v1.17.17            0ddd96ecb9e5        5 months ago        161MB
k8s.gcr.io/kube-scheduler            v1.17.17            d415ebbf09db        5 months ago        94.4MB
k8s.gcr.io/coredns                   1.6.5               70f311871ae1        20 months ago       41.6MB
k8s.gcr.io/etcd                      3.4.3-0             303ce5db0e90        20 months ago       288MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        3 years ago         742kB

集群初始化

注意:此过程只需要在master节点上执行

创建集群

[root@master ~]# kubeadm init \
--kubernetes-version=v1.17.17 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=你的master的ip地址

如果成功,你将会在最后两行看见如下消息

 复制这两行消息

将节点加入k8s集群

在节点一及节点二中粘贴刚刚复制的消息

在master节点中添加配置

[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[root@master ~]# kubectl get nodes

查看kubernetes节点信息

[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES    AGE    VERSION
master   NotReady   master   149m   v1.17.4
node1    NotReady   <none>   137m   v1.17.4
node2    NotReady   <none>   137m   v1.17.4

表明节点添加成功

安装网络插件

注意:此操作只在master节点执行

 获取fannel的配置文件

[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

如果下载失败可以复制链接到你的电脑然后通过代理进行下载传到虚拟机中

运行安装命令

[root@master ~]# kubectl apply -f kube-flannel.yml 
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

查看状态

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   3h34m   v1.17.4
node1    Ready    <none>   3h23m   v1.17.4
node2    Ready    <none>   3h23m   v1.17.4

服务部署

在k8s集群中部署一个nginx程序,测试集群是否在正常工作

部署nginx

注意:此操作只在master节点上执行

[root@master ~]# kubectl create deployment nginx --image=nginx:1.14-alpine
deployment.apps/nginx created

暴露端口

[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed

查看服务状态

[root@master ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6867cdf567-65vjr   1/1     Running   0          33m
[root@master ~]# kubectl get service
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        17h
nginx        NodePort    10.99.24.85   <none>        80:31892/TCP   33m

在浏览器中输入主机ip地址加上nginx的端口,我这里是31892

表明nginx已经正常开启了

转自https://www.cnblogs.com/Ayanamidesu/p/14926118.html

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

k8s集群环境搭建 的相关文章

  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 为什么 gcc 抱怨“错误:模板参数 '0' 的类型 'intT' 取决于模板参数”?

    我的编译器是gcc 4 9 0 以下代码无法编译 template
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler

随机推荐

  • 查找子串出现的次数C/C++(strstr函数)

    任务描述 本关任务 计算一个字符串 子串 在另一个字符串 长串 中出现的次数 相关知识 字符串操作函数 C 和 C 提供了一系列操作字符串的函数 要使用这些函数只要在代码的头文件部分包含 string h 即可 这里我们用到strstr函数
  • 10. M601 HTTP例程介绍

    include
  • flask-sqlalchemy事务引发的若干个问题思考

    一 首先要明白flush和commit区别 gt flush 写数据库 但不提交 也就是事务未结束 gt commit sqlalchemy会自动创建隐私的事务 先调用flush写数据库 然后提交 结束事务 并开始新的事务 二 对db se
  • 程序员面试题精选100题(48)-二叉树两结点的最低共同父结点

    程序员面试题精选100题 48 二叉树两结点的最低共同父结点 题目 二叉树的结点定义如下 struct TreeNode int m nvalue TreeNode m pLeft TreeNode m pRight 输入二叉树中的两个结点
  • openwrt dhcp不分配_虚拟机安装openwrt软路由以x86为例

    一 安装纯净版可以去官方下载https openwrt org 然后安装自己喜欢的插件 二 下载一些大神已经编译好的镜像文件 可以去一些论坛或者github 去搜索下载 大佬提供的好多是img的文件 三 对于img的文件进行安装 需要准备三
  • spark集群 分类器 部署

    部署一个Spark集群分类器需要以下步骤 1 安装和配置Spark集群 安装和配置Spark集群 包括master节点和worker节点 确保所有节点都可以相互通信 可以使用SSH连接 2 准备数据 准备分类器所需的数据 可以是文本 图像或
  • IDEA连接TiDB报字符集不匹配问题COLLATION ‘utf8_general_ci‘ is not valid for CHARACTER SET ‘utf8mb4‘.

    最近因工作需要 部署了一套TiDB 然而通过IDEA 使用MySQL驱动连接数据库时 一直报字符集不匹配 网上找了些资料 但是并没有相关说明 最后请教了一个大佬 问题得到解决 这边记录一下 希望能帮助到遇到同样问题的人 问题现象 IDEA连
  • python 一行打印出100以内的质素(素数)

    python的列表推导式它是个好东西 不仅在列表里能用 在字典 集合中同样能用 如果想用一行代码打印出100以内的质数 素数 的话 不妨尝试一下下面这行代码 print k for k in set range 2 100 1 set i
  • CLabel函数说明

    原作者地址及最新更新 http www codeproject com Articles 215 Extended Use of CStatic Class CLabel 1 6 本控件可以实现类似VB中LABEL控件的功能 可能正是许多人
  • 日志显示格式%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n

    日志显示格式 d yyyy MM dd HH mm ss thread 5level logger msg n PatternLayout包含的所有有效的格式 c 输出logger名称 C 输出类名 d HH mm ss SSS 表示输出到
  • 【docker】docker启动、重启、关闭命令,附带:docker启动容器报错:docker: Error response from daemon: driver failed programmi...

    在关闭并放置centos 的防火墙重启之后 操作 https www cnblogs com sxdcgaq8080 p 10032829 html 启动docker容器就发现开始报错 root localhost elasticSearc
  • mysql数据库备份与恢复

    1 mysqldump 逻辑备份mysql数据库 mysqldump的原理 mysqldump命令备份数据的过程 实际上就是把数据从mysql库里以逻辑的sql语句的形式直接输出或者生成备份文件的过程 语法 mysqldump u用户名 p
  • 一分钟教会你五种CycleGAN的优质创新思路(附代码)

    专栏导读 本文已收录于专栏 风格迁移之从入门到成功魔改 欢迎免费订阅 此专栏用于带你从零基础学会什么是风格迁移 风格迁移有什么作用 传统做法和Cyclegan的原理 及其优缺点 以及最重要的CycleGAN的成功魔改 附代码 1 环境部署搭
  • 启莱OA treelist.aspx SQL注入

    子曰 为政以德 譬如北辰 居其所 而众星共之 漏洞复现 访问漏洞url 使用SQLmap对参数 user 进行注入 漏洞证明 文笔生疏 措辞浅薄 望各位大佬不吝赐教 万分感谢 免责声明 由于传播或利用此文所提供的信息 技术或方法而造成的任何
  • 微信小程序 输入框 input 组件

    完整微信小程序 Java后端 技术贴目录清单页面 必看 输入框 该组件是原生组件 使用时请注意相关限制 属性 类型 默认值 必填 说明 最低版本 value string 是 输入框的初始内容 1 0 0 type string text
  • 部门新来的00后测试员已把我卷崩溃,老油条表示真干不过,但是...

    在程序员职场上 什么样的人最让人反感呢 是技术不好的人吗 并不是 技术不好的同事 我们可以帮他 是技术太强的人吗 也不是 技术很强的同事 可遇不可求 向他学习还来不及呢 真正让人反感的 是技术平平 却急于表现自己的人 每天加班到12点 在老
  • workman 日志_workerman 的属性

    Created by PhpStorm User zeopean Date 2016 08 26 Time 16 35 use Workerman Worker use Workerman Lib Timer require once Wo
  • (译) JSON-RPC 2.0 规范(中文版)

    起源时间 2010 03 26 基于2009 05 24版本 更新 2013 01 04 作者 JSON RPC工作组 lt json rpc googlegroups com gt 原文链接 http www jsonrpc org sp
  • Linux 如何解决共享库的版本控制(避免Dll Hell)

    Linux 系统 也同样面临和Window一样的问题 如何控制动态库的多个版本问题 Window之前没有处理好 为此专门有个名词来形容这个问题 Dll hell 其严重影响软件的升级和维护 Dll hell 是指windows 上动态库新版
  • k8s集群环境搭建

    环境规划 集群类型 一主多从 一台master节点和多台node节点 搭建简单 但是有单机故障风险 适合用于测试环境 多主多从 多台master节点和多台node节点 搭建麻烦 安全性高 适合用于生产环境 为了测试简单 本次搭建的是一主两从