一 kubeadm介绍

1.1 概述

Kubeadm 是一个工具,它提供了 kubeadm init 以及 kubeadm join 这两个命令作为快速创建 kubernetes 集群的最佳实践。
kubeadm 通过执行必要的操作来启动和运行一个最小可用的集群。kubeadm 只关心启动集群,而不关心其他工作,如部署前的节点准备工作、安装各种Kubernetes Dashboard、监控解决方案以及特定云提供商的插件,这些都不属于 kubeadm 关注范围。

1.2 kubeadm功能

  • kubeadm init 启动一个 Kubernetes 主节点;
  • kubeadm join 启动一个 Kubernetes 工作节点并且将其加入到集群;
  • kubeadm upgrade 更新一个 Kubernetes 集群到新版本;
  • kubeadm config 如果使用 v1.7.x 或者更低版本的 kubeadm 初始化集群,您需要对集群做一些配置以便使用 kubeadm upgrade 命令;
  • kubeadm token 管理 kubeadm join 使用的令牌;
  • kubeadm reset 还原 kubeadm init 或者 kubeadm join 对主机所做的任何更改;
  • kubeadm version 打印 kubeadm 版本;
  • kubeadm alpha 预览一组可用的新功能以便从社区搜集反馈。

二 kubeadm安装

2.1 前置条件

相应的充足资源的Linux服务器;
建议关闭SELinux及防火墙:sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config && systemctl stop firewalld
Mac及UUID唯一;
若未关闭防火墙则建议放通相应端口,如下:
Master节点——
规则
方向
端口范围
作用
使用者
TCP
Inbound
6443*
Kubernetes API server
All
TCP
Inbound
2379-2380
etcd server client API
kube-apiserver, etcd
TCP
Inbound
10250
Kubelet API
Self, Control plane
TCP
Inbound
10251
kube-scheduler
Self
TCP
Inbound
10252
kube-controller-manager
Self
Worker 节点
规则
方向
端口范围
作用
使用者
TCP
Inbound
10250
Kubelet API
Self, Control plane
TCP
Inbound
30000-32767
NodePort Services**
All
其他更多前置准备见:https://kubernetes.io/zh/docs/setup/independent/install-kubeadm/

2.2 节点规划

节点
IP
类型
Master
172.24.8.71
Kubernetes master节点
node1
172.24.8.72
Kubernetes node节点1
node2
172.24.8.73
Kubernetes node节点2

提示:本实验使用单master部署,生产中可部署奇数个master以做高可用。

2.3 手动添加解析

  1. [root@master ~]# cat <<EOF >> /etc/hosts
  2. 172.24.8.71 master
  3. 172.24.8.72 node1
  4. 172.24.8.73 node2
  5. EOF
 
提示:所有节点均建议如上操作。

2.4 修正iptables

  1. [root@k8s_master ~]# cat <<EOF >> /etc/sysctl.d/k8s.conf
  2. net.bridge.bridge-nf-call-ip6tables = 1
  3. net.bridge.bridge-nf-call-iptables = 1
  4. net.ipv4.ip_forward = 1
  5. EOF
  6. [root@master ~]# modprobe br_netfilter
  7. [root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
 
提示:所有节点均建议如上操作。

2.5 加载IPVS

pod的负载均衡是用kube-proxy来实现的,实现方式有两种,一种是默认的iptables,一种是ipvs,相对iptables,ipvs有更好的性能。且当前ipvs已经加入到了内核的主干。
为kube-proxy开启ipvs的前提需要加载以下的内核模块:
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
  1. [root@master ~]# cat > /etc/sysconfig/modules/ipvs.modules <<EOF
  2. #!/bin/bash
  3. modprobe -- ip_vs
  4. modprobe -- ip_vs_rr
  5. modprobe -- ip_vs_wrr
  6. modprobe -- ip_vs_sh
  7. modprobe -- nf_conntrack_ipv4
  8. EOF
  9. [root@master ~]# chmod /etc/sysconfig/modules/ipvs.modules
  10. [root@master ~]# bash /etc/sysconfig/modules/ipvs.modules
  11. [root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
  12. [root@master ~]# yum -y install ipvsadm
提示:所有节点均建议如上操作。
为了更好的管理和查看ipvs,可安装相应的管理工具《002.LVS管理工具的安装与使用》。

2.6 安装Docker

  1. [root@master ~]# yum -y update
  2. [root@master ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
  3. [root@master ~]# yum-config-manager \
  4. --add-repo \
  5. http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  6. [root@master ~]# yum list docker-ce --showduplicates | sort -r #查看可用版本
  7. [root@master ~]# yum -y install docker-ce-18.09.0-3.el7 #kubeadm当前不支持18.09以上版本
  8. [root@master ~]# mkdir /etc/docker
  9. [root@master ~]# cat > /etc/docker/daemon.json <<EOF
  10. {
  11. "exec-opts": ["native.cgroupdriver=systemd"],
  12. "log-driver": "json-file",
  13. "log-opts": {
  14. "max-size": "100m"
  15. },
  16. "storage-driver": "overlay2",
  17. "storage-opts": [
  18. "overlay2.override_kernel_check=true"
  19. ]
  20. }
  21. EOF #配置system管理cgroup
  22. [root@master ~]# vi /usr/lib/systemd/system/docker.service #更改docker镜像路径
  23. ExecStart=/usr/bin/dockerd-current --data-root=/data/docker #修改为独立的单独路径
  24. [root@master ~]# systemctl daemon-reload
  25. [root@master ~]# systemctl restart docker
  26. [root@master ~]# systemctl enable docker
  27. [root@master ~]# iptables -nvL #确认iptables filter表中FOWARD链的默认策略(pllicy)为ACCEPT。
提示:所有节点均建议如上操作。

Kubernetes 1.13版本兼容docker版本等可参考:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.13.md。

2.7 相关组件包

需要在每台机器上都安装以下的软件包:
kubeadm: 用来初始化集群的指令;
kubelet: 在集群中的每个节点上用来启动 pod 和 container 等;
kubectl: 用来与集群通信的命令行工具。
kubeadm 不能 帮您安装或管理 kubelet 或 kubectl ,所以得保证他们满足通过 kubeadm 安装的 Kubernetes 控制层对版本的要求。如果版本没有满足要求,可能导致一些意外错误或问题。
具体相关组件安装见《附001.kubectl介绍及使用》。

2.8 正式安装

  1. [root@master ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
  2. [kubernetes]
  3. name=Kubernetes
  4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  5. enabled=1
  6. gpgcheck=1
  7. repo_gpgcheck=1
  8. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  9. EOF
  10. #配置yum源
  11. [root@master ~]# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
说明:同时安装了cri-tools, kubernetes-cni, socat三个依赖:
socat:kubelet的依赖;
cri-tools:即CRI(Container Runtime Interface)容器运行时接口的命令行工具。
  1. [root@master ~]# systemctl enable kubelet
提示:所有节点均建议如上操作。此时不需要启动kubelet,初始化的过程中会自动启动的,如果此时启动了会出现报错,忽略即可。

2.9 其他调整

Kubernetes 从1.8版本开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。
  1. [root@master ~]# echo "vm.swappiness=0" >> /etc/sysctl.d/k8s.conf
  2. [root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
提示:同时需要注意fstba等系统挂载的swap。

三 初始化最简集群-Mater

3.1 Master上初始化

  1. [root@master ~]# kubeadm init --kubernetes-version=v1.14.0 --pod-network-cidr=10.244.0.0/16
  1. [root@master ~]# mkdir -p $HOME/.kube
  2. [root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. [root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
提示:选择flannel作为Pod网络插件,所以上面的命令指定–pod-network-cidr=10.244.0.0/16。
默认使用k8s.gcr.io拉取镜像,国内用户可通过以下命令使用阿里源:
kubeadm init --kubernetes-version=v1.14.0 --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
  1. [root@master ~]# export KUBECONFIG=$HOME/.kube/config #声明配置文件
附加:初始化过程粗略解析:
初始化Kubernetes大致步骤如下:
  • [kubelet-start] 生成kubelet的配置文件”/var/lib/kubelet/config.yaml”
  • [certificates]生成相关的各种证书
  • [kubeconfig]生成相关的kubeconfig文件
  • [bootstraptoken]生成token记录下来,后边使用kubeadm join往集群中添加节点时会用到
提示:若初始化异常可通过[root@master ~]# kubeadm reset && rm -rf $HOME/.kube重置。

3.2 查看集群状态

  1. [root@master ~]# kubectl get cs
  2. NAME STATUS MESSAGE ERROR
  3. controller-manager Healthy ok
  4. scheduler Healthy ok
  5. etcd-0 Healthy {"health":"true"}
 

四 安装flannel插件

4.1 NIC插件介绍

Calico 是一个安全的 L3 网络和网络策略提供者。
Canal 结合 Flannel 和 Calico, 提供网络和网络策略。
Cilium 是一个 L3 网络和网络策略插件, 能够透明的实施 HTTP/API/L7 策略。 同时支持路由(routing)和叠加/封装( overlay/encapsulation)模式。
Contiv 为多种用例提供可配置网络(使用 BGP 的原生 L3,使用 vxlan 的 overlay,经典 L2 和 Cisco-SDN/ACI)和丰富的策略框架。Contiv 项目完全开源。安装工具同时提供基于和不基于 kubeadm 的安装选项。
Flannel 是一个可以用于 Kubernetes 的 overlay 网络提供者。
Romana 是一个 pod 网络的层 3 解决方案,并且支持 NetworkPolicy API。Kubeadm add-on 安装细节可以在这里找到。
Weave Net 提供了在网络分组两端参与工作的网络和网络策略,并且不需要额外的数据库。
CNI-Genie 使 Kubernetes 无缝连接到一种 CNI 插件,例如:Flannel、Calico、Canal、Romana 或者 Weave。
提示:本实验使用flannel插件,附加演示了另一种插件Weave的安装。

4.2 下载flannel配置

  1. [root@master ~]# mkdir flannel
  2. [root@master ~]# cd flannel/
  3. [root@master flannel]# wget https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml
  4. [root@master flannel]# kubectl apply -f kube-flannel.yml
  5. [root@master ~]# kubectl get pod --all-namespaces -o wide #查看相关pod
 
延伸:
使用kubeadm初始化的集群,出于安全考虑Pod不会被调度到Master Node上,其策略是因为当前的master节点node1被打上了node-role.kubernetes.io/master:NoSchedule的污点:
  1. [root@master ~]# kubectl describe node master | grep Taint
  2. Taints: node-role.kubernetes.io/master:NoSchedule
 
附加:安装weave插件
  1. [root@master ~]# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
提示:kubeadm 只支持基于容器网络接口(CNI)的网络而且不支持 kubenet。
  1. [root@master ~]# kubectl get pods --all-namespaces #查看验证
  2. [root@master ~]# kubectl get nodes
 
提示:更多Kubetcl使用参考:https://kubernetes.io/docs/reference/kubectl/kubectl/
https://kubernetes.io/docs/reference/kubectl/overview/
更多kubeadm使用参考:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

五 Node节点安装

5.1 node节点准备

执行完所有2.2——2.9步骤。

5.2 加入集群

  1. [root@node1 ~]# echo "1" >/proc/sys/net/ipv4/ip_forward
  2. [root@node1 ~]# kubeadm join 172.24.8.71:6443 --token v6xij5.cdhd5h5hspohf1kc \
  3. --discovery-token-ca-cert-hash sha256:94b9a19c3d4b9bd7b4f0ff86a882dad5fe4549b0365626e7f4d26831c9caa0c4
  4. [root@node2 ~]# echo "1" >/proc/sys/net/ipv4/ip_forward
  5. [root@node2 ~]# kubeadm join 172.24.8.71:6443 --token v6xij5.cdhd5h5hspohf1kc \
  6. --discovery-token-ca-cert-hash sha256:94b9a19c3d4b9bd7b4f0ff86a882dad5fe4549b0365626e7f4d26831c9caa0c4
 
注意:默认为0,修改为1,则开启IP转发功能,修改后立刻生效,但重启后失效。

5.3 确认验证

  1. [root@master ~]# kubectl get nodes #节点状态
  2. [root@master ~]# kubectl get cs #组件状态
  3. [root@master ~]# kubectl get serviceaccount #服务账户
  4. [root@master ~]# kubectl cluster-info #集群信息
  5. [root@master ~]# kubectl get pod -n kube-system -o wide #所有服务状态
 
提示:更多Kubetcl使用参考:https://kubernetes.io/docs/reference/kubectl/kubectl/
https://kubernetes.io/docs/reference/kubectl/overview/
更多kubeadm使用参考:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

六 开启IPVS

6.1 修改ConfigMap

  1. [root@master ~]# kubectl edit cm kube-proxy -n kube-system #模式改为ipvs
  2. ……
  3. mode: "ipvs"
  4. ……
  5. [root@master ~]# kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
  6. [root@master ~]# kubectl get pod -n kube-system | grep kube-proxy #查看proxy的pod
  7. [root@master ~]# kubectl logs kube-proxy-mgqfs -n kube-system #查看任意一个proxy pod的日志
 

七 集群节点移除

7.1 master节点移除node2

 
  1. [root@master ~]# kubectl drain node2 --delete-local-data --force --ignore-daemonsets
  2. [root@master ~]# kubectl delete node node2
  3. [root@master ~]# kubectl get nodes
 
 

7.2 node2节点重置

  1. [root@node2 ~]# kubeadm reset
  2. [root@node2 ~]# ifconfig cni0 down
  3. [root@node2 ~]# ip link delete cni0
  4. [root@node2 ~]# ifconfig flannel.1 down
  5. [root@node2 ~]# ip link delete flannel.1
  6. [root@node2 ~]# rm -rf /var/lib/cni/
 

7.3 卸载(删除)集群

参考6.1+6.2删除所有集群节点,然后sudo kubeadm reset。

八 测试集群

8.1 创建测试service

  1. [root@master ~]# kubectl run nginx --replicas=2 --labels="run=load-balancer-example" --image=nginx --port=80
  2. [root@master ~]# kubectl expose deployment nginx --type=NodePort --name=example-service #暴露端口
  3. [root@master ~]# kubectl get service #查看服务状态
  4. [root@master ~]# kubectl describe service example-service #查看信息
 

8.2 测试访问

  1. [root@master ~]# curl 10.102.244.218:80
  1. [root@master ~]# kubectl get pod -o wide #查看endpoint
  1. [root@master ~]# curl 10.244.3.2:80 #访问endpoint,与访问服务ip结果相同
  2. [root@master ~]# curl 10.244.1.2:80
 
 

附一:kubeadm init参数

作用:初始化一个Kubernetes master节点
语法:kubeadm init [flags]
参数:
  1. --apiserver-advertise-address stringAPI Server将要广播的监听地址。如指定为`0.0.0.0` 将使用缺省的网卡地址。
  2. --apiserver-bind-port int32API Server绑定的端口,缺省值: 6443
  3. --apiserver-cert-extra-sans stringSlice:可选的额外提供的证书的别名,(SANs)用于指定API Server的服务器证书。可以是IP地址也可以是DNS名称。
  4.  
  5. --cert-dir string:证书的存储路径,缺省值: "/etc/kubernetes/pki"
  6. --config stringkubeadm配置文件的路径。
  7. --cri-socket string:指明要连接的CRI socket文件,缺省值: "/var/run/dockershim.sock"
  8. --dry-run:不会应用任何改变,只会输出将要执行的操作,即测试运行。
  9. --feature-gates string:键值对的集合,用来控制各种功能的开关。可选项有:
  10. Auditing=true|false (当前为ALPHA状态 - 缺省值=false)
  11. CoreDNS=true|false (缺省值=true)
  12. DynamicKubeletConfig=true|false (当前为BETA状态 - 缺省值=false)
  13. -h, --help:获取init命令的帮助信息。
  14. --ignore-preflight-errors stringSlice:忽视检查项错误列表,列表中的每一个检查项如发生错误将被展示输出为警告,而非错误。例如: 'IsPrivilegedUser,Swap'. 如填写为 'all' 则将忽视所有的检查项错误。
  15. --kubernetes-version string:为control plane选择一个特定的Kubernetes版本,缺省值: "stable-1"
  16. --node-name string:指定节点的名称。
  17. --pod-network-cidr string:指明pod网络可以使用的IP地址段。如果设置了这个参数,control plane将会为每一个节点自动分配CIDRs
  18. --service-cidr string:为service的虚拟IP地址另外指定IP地址段,缺省值: "10.96.0.0/12"
  19. --service-dns-domain string:为services另外指定域名, 例如: "myorg.internal",缺省值: "cluster.local"
  20. --skip-token-print:不打印出由 `kubeadm init` 命令生成的默认令牌。
  21. --token string:这个令牌用于建立主从节点间的双向受信链接。格式为 [a-z0-9]{6}\.[a-z0-9]{16} - 示例:abcdef.0123456789abcdef
  22. --token-ttl duration:令牌被自动删除前的可用时长 (示例: 1s, 2m, 3h). 如果设置为 '0', 令牌将永不过期。缺省值: 24h0m0s
 
 

附二:kubeadm init过程

  1. kubeadm init 命令通过执行下列步骤来启动一个 Kubernetes master 节点。
  2. 在做出变更前运行一系列的预检项来验证系统状态。一些检查项目仅仅触发警告,其它的则会被视为错误并且退出 kubeadm,除非问题被解决或者用户指定了 --ignore-preflight-errors=<list-of-errors> 参数。
  3. 生成一个自签名的 CA证书 (或者使用现有的证书,如果提供的话) 来为集群中的每一个组件建立身份标识。如果用户已经通过 --cert-dir 配置的证书目录(缺省值为 /etc/kubernetes/pki)提供了他们自己的 CA证书 以及/或者 密钥, 那么将会跳过这个步骤。如果指定了 --apiserver-cert-extra-sans 参数, APIServer 的证书将会有额外的 SAN 条目,如果必要的话,将会被转为小写。
  4. 将 kubeconfig 文件写入 /etc/kubernetes/ 目录以便 kubelet、controller-manager 和 scheduler 用来连接到 API server,它们每一个都有自己的身份标识,同时生成一个名为 admin.conf 的独立的 kubeconfig 文件,用于管理操作。
  5. 如果 kubeadm 被调用时附带了 --feature-gates=DynamicKubeletConfig 参数, 它会将 kubelet 的初始化配置写入 /var/lib/kubelet/config/init/kubelet 文件中。 这个功能现在是默认关闭的,但是在未来的版本中很有可能会默认启用。
  6. 为 API server、controller manager 和 scheduler 生成静态 Pod 的清单文件。假使没有提供一个外部的 etcd 服务的话,也会为 etcd 生成一份额外的静态 Pod 清单文件。
  7. 静态 Pod 的清单文件被写入到 /etc/kubernetes/manifests 目录,kubelet 会监视这个目录以便在系统启动的时候创建 Pods。
  8. 一旦 control plane 的 Pods 都运行起来, kubeadm init 的工作流程就继续往下执行。
  9. 如果 kubeadm 被调用时附带了 --feature-gates=DynamicKubeletConfig 参数, 它将创建一份 ConfigMap 和一些便于 kubelet 访问这份 ConfigMap 的 RBAC 规则,并且通过将 Node.spec.configSource 指向到新创建的 ConfigMap 来更新节点设置。这样它就完成了对 Kubelet 的动态配置。 这个功能现在是默认关闭的,但是在未来的版本中很有可能会默认启用。
  10. 对 master 节点应用 labels 和 taints 以便不会在它上面运行其它的工作负载。
  11. 生成令牌以便其它节点以后可以使用这个令牌向 master 节点注册它们自己。 可选的,用户可以通过 --token 提供一个令牌。
  12. 为了使得节点能够遵照 Bootstrap Tokens 和 TLS Bootstrap这两份文档中描述的机制加入到集群中,kubeadm 会执行所有的必要配置:
    • 创建一份 ConfigMap 提供添加集群节点所需的信息,并为该 ConfigMap 设置相关的 RBAC 访问规则。
    • 使得 Bootstrap Tokens 可以访问 CSR 签名 API。
    • 对新的 CSR 请求配置为自动签发。
提示:通过 API server 安装一个 DNS 服务器 (CoreDNS) 和 kube-proxy 附加组件。 在 1.11 版本以及更新版本的 Kubernetes 中 CoreDNS 是默认的 DNS 服务器。 如果要安装 kube-dns 而不是 CoreDNS, 需要在调用 kubeadm 的时候附加 --feature-gates=CoreDNS=false 参数。请注意,尽管 DNS 服务器已经被部署了,它并不会被调度直到你安装好了 CNI 网络插件。
 
参考链接:
https://blog.csdn.net/fanren224/article/details/86573264
https://blog.frognew.com/2019/04/kubeadm-install-kubernetes-1.14.html
http://www.luyixian.cn/news_show_11429.aspx
https://www.kubernetes.org.cn/4956.html

附003.Kubeadm部署Kubernetes的更多相关文章

  1. 附025.kubeadm部署Kubernetes更新证书

    一 查看证书 1.1 查看过期时间-方式一 1 [root@master01 ~]# tree /etc/kubernetes/pki/ 2 [root@master01 ~]# for tls in ...

  2. 附012.Kubeadm部署高可用Kubernetes

    一 kubeadm介绍 1.1 概述 参考<附003.Kubeadm部署Kubernetes>. 1.2 kubeadm功能 参考<附003.Kubeadm部署Kubernetes& ...

  3. 使用kubeadm部署Kubernetes v1.13.3

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: 1. 安装要求 在开始之前,部署Kubernetes集群 ...

  4. [原]使用kubeadm部署kubernetes(一)

    #######################    以下为声明  ##################### 在公众号  木子李的菜田 输入关键词:   k8s 有系列安装文档 此文档是之前做笔记在 ...

  5. [转帖]CentOS 7 使用kubeadm 部署 Kubernetes

    CentOS 7 使用kubeadm 部署 Kubernetes   关闭swap 执行swapoff临时关闭swap. 重启后会失效,若要永久关闭,可以编辑/etc/fstab文件,将其中swap分 ...

  6. 02 . Kubeadm部署Kubernetes及简单应用

    kubeadm部署Kubernetes kubeadm简介 # kubeadm是一位高中生的作品,他叫Lucas Kaldstrom,芬兰人,17岁用业余时间完成的一个社区项目: # kubeadm的 ...

  7. Kubeadm部署Kubernetes

    Kubeadm部署Kubernetes 1.环境准备 主机名 IP 说明 宿主机系统 k8s-master 10.0.0.101 Kubernetes集群的master节点 Ubuntu2004 k8 ...

  8. 使用kubeadm部署Kubernetes集群

    一.环境架构与部署准备 1.集群节点架构与各节点所需安装的服务如下图: 2.安装环境与软件版本: Master: 所需软件:docker-ce 17.03.kubelet1.11.1.kubeadm1 ...

  9. kubeadm部署Kubernetes集群

    Preface 通过kubeadm管理工具部署Kubernetes集群,相对离线包的二进制部署集群方式而言,更为简单与便捷.以下为个人学习总结: 两者区别在于前者部署方式使得大部分集群组件(Kube- ...

随机推荐

  1. HDU5973 Game of Geting Stone(威佐夫博弈)

    Two people face two piles of stones and make a game. They take turns to take stones. As game rules, ...

  2. C++ 代码小技巧(一)

    在写代码的时候,我们常常会用一些小技巧,下面做简单介绍 一.o1+o2+o3(常数优化) 如题,开优化开关. 有的OJ上有O2优化选项,当然,你也可以这样:在代码开头这样加一句: #pragma GC ...

  3. 打开TXT文件并显示

    <!DOCTYPE html> <html> <head> <title></title> <script> function ...

  4. Redis实战 | 5种Redis数据类型详解

    我们知道Redis是目前非常主流的KV数据库,它因高性能的读写能力而著称,其实还有另外一个优势,就是Redis提供了更加丰富的数据类型,这使得Redis有着更加广泛的使用场景.那Redis提供给用户的 ...

  5. [Java并发] AQS抽象队列同步器源码解析--独占锁释放过程

    [Java并发] AQS抽象队列同步器源码解析--独占锁获取过程 上一篇已经讲解了AQS独占锁的获取过程,接下来就是对AQS独占锁的释放过程进行详细的分析说明,废话不多说,直接进入正文... 锁释放入 ...

  6. JavaEE基础(05):过滤器、监听器、拦截器,应用详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Listener监听器 1.概念简介 JavaWeb三大组件:Servlet,Listener,Filter.监听器就是指在应用程序中监听 ...

  7. 【docker】Dockerfile

    [docker]Dockerfile 转载: ============================================================= =============== ...

  8. Android(常用)主流UI开源库整理

    这几天刚做完一个项目..有点空余时间,就想着吧这一两年做的项目中的UI界面用到的一些库整理一下.后来想了一下,既然要整理,就把网上常用的 AndroidUI界面的主流开源库 一起整理一下,方便查看. ...

  9. 后缀数组SA入门(史上最晦涩难懂的讲解)

    参考资料:victorique的博客(有一点锅无伤大雅,记得看评论区),$wzz$ 课件(快去$ftp$%%%),$oi-wiki$以及某个人的帮助(万分感谢!) 首先还是要说一句:我不知道为什么我这 ...

  10. CentOS7 安装 Redis 并设置开机启动

    1.下载 https://redis.io/download cd /usr/local/src wget -c http://download.redis.io/releases/redis-3.2 ...