上传文件至 /
This commit is contained in:
parent
c810f4e7af
commit
e7b0a0fbed
1646
kubernetes-Pod详解.md
Normal file
1646
kubernetes-Pod详解.md
Normal file
File diff suppressed because it is too large
Load Diff
83
kubernetes-基础.md
Normal file
83
kubernetes-基础.md
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
<h2><center>Kubernetes 基础</center></h2>
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
## 一:Kubernetes 介绍
|
||||||
|
|
||||||
|
### 1. 应用部署方式
|
||||||
|
|
||||||
|
在部署应用程序的方式上,主要经历了三个时代:
|
||||||
|
|
||||||
|
1. 传统部署:互联网早期,会直接将应用程序部署在物理机上
|
||||||
|
- 优点:简单,不需要其他技术的参与
|
||||||
|
- 缺点:不能为应用程序定义资源使用边界,很难合理地分配计算机资源,而且程序之间容易产生影响
|
||||||
|
2. 虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境
|
||||||
|
- 优点:程序环境不会相互产生影响,提供了一定程度的安全性
|
||||||
|
- 缺点:增加了操作系统,浪费了部分资源
|
||||||
|
3. 容器化部署:与虚拟化类比,但是共享了操作系统
|
||||||
|
- 优点:
|
||||||
|
1. 可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等
|
||||||
|
2. 运行应用程序所需要的资源都被容器包装,并和底层基础架构解耦
|
||||||
|
3. 容器化的应用程序可以跨云服务商、跨Linux操作系统发行版进行部署
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
容器化部署方式给带来很多的便利,但是也会出现一些问题,比如说:
|
||||||
|
|
||||||
|
- 一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器
|
||||||
|
- 当并发访问量变大的时候,怎么样做到横向扩展容器数量
|
||||||
|
|
||||||
|
这些容器管理的问题统称为容器编排问题,为了解决这些容器编排问题,就产生了一些容器编排软件:
|
||||||
|
|
||||||
|
- `Swarm`:`Docker`自己的容器编排工具
|
||||||
|
- `Mesos`:`Apache`的一个资源统一管控的工具,需要和`Marathon`结合使用
|
||||||
|
- `Kubernetes`:`Google`开源的容器编排工具
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 2. kubernetes 简介
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
`kubernetes`,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密----`Borg`系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本。
|
||||||
|
|
||||||
|
`kubernetes`的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:
|
||||||
|
|
||||||
|
- 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器
|
||||||
|
- 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
|
||||||
|
- 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
|
||||||
|
- 负载均衡:如果一个服务启动了多个容器,能够自动实现请求的负载均衡
|
||||||
|
- 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
|
||||||
|
- 存储编排:可以根据容器自身的需求自动创建存储卷
|
||||||
|
|
||||||
|
### 3. kubernetes 组件
|
||||||
|
|
||||||
|
一个`kubernetes`集群主要是由控制节点(master)、工作节点(node)构成,每个节点上都会安装不同的组件。
|
||||||
|
|
||||||
|
**`master`:集群的控制平面,负责集群的决策**
|
||||||
|
|
||||||
|
- `ApiServer`:资源操作的唯一入口,接收用户输入的命令,提供认证、授权、`API`注册和发现等机制
|
||||||
|
- `Scheduler`:负责集群资源调度,按照预定的调度策略将`Pod`调度到响应的`node`节点上
|
||||||
|
- `ControllerManager`:负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等
|
||||||
|
- `Etcd`:负责存储集群中各种资源对象的信息
|
||||||
|
|
||||||
|
**`node`:集群的数据平面,负责为容器提供运行环境**
|
||||||
|
|
||||||
|
- `Kubelet`:负责维护容器的生命周期,即通过控制`docker`,来创建、更新、销毁容器
|
||||||
|
- `KubeProxy`:负责提供集群内部的服务发现和负载均衡
|
||||||
|
- `Docker`:负责节点上容器的各种操作
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
下面,以部署一个`nginx`服务来说明`kubernetes`系统各个组件调用关系:
|
||||||
|
|
||||||
|
1. 首先要明确,一旦`kubernetes`环境启动之后,`master`和`node`都会将自身的信息存储到`etcd`数据库中
|
||||||
|
2. 一个`nginx`服务的安装请求会首先被发送到`master`节点的`apiServer`组件
|
||||||
|
3. `apiServer`组件会调用`scheduler`组件来决定到底应该把这个服务安装到哪个`node`节点上
|
||||||
|
4. 在此时,它会从`etcd`中读取各个`node`节点的信息,然后按照一定的算法进行选择,并将结果告知`apiServer`
|
||||||
|
5. `apiServer`调用`controller-manager`去调度`Node`节点安装`nginx`服务
|
||||||
|
6. `kubelet`接收到指令后,会通知`docker`,然后由`docker`来启动一个`nginx`的`pod`
|
||||||
|
7. `pod`是`kubernetes`的最小操作单元,容器必须跑在`pod`中
|
||||||
|
8. 至此一个`nginx`服务就运行了,如果需要访问`nginx`,就需要通过`kube-proxy`来对`pod`产生访问的代理
|
||||||
|
|
||||||
|
这样,外界用户就可以访问集群中的`nginx`服务了
|
271
kubernetes-资源管理.md
Normal file
271
kubernetes-资源管理.md
Normal file
@ -0,0 +1,271 @@
|
|||||||
|
<h2><center>kubernetes 资源管理</center></h2>
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
## 一:资源管理
|
||||||
|
|
||||||
|
### 1. 资源管理介绍
|
||||||
|
|
||||||
|
在`kubernetes`中,所有的内容都抽象为资源,用户需要通过操作资源来管理`kubernetes`。
|
||||||
|
|
||||||
|
- `kubernetes`的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在`kubernetes`集群中运行一个个的容器,并将指定的程序跑在容器中。
|
||||||
|
- `kubernetes`的最小管理单元是`pod`而不是容器,所以只能将容器放在`Pod`中,而`kubernetes`一般也不会直接管理`Pod`,而是通过`Pod`控制器来管理`Pod`的。
|
||||||
|
- `Pod`可以提供服务之后,就要考虑如何访问`Pod`中服务,`kubernetes`提供了`Service`资源实现这个功能。
|
||||||
|
- 当然,如果`Pod`中程序的数据需要持久化,`kubernetes`还提供了各种存储系统。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 2. 资源管理方式
|
||||||
|
|
||||||
|
- 命令式对象管理:直接使用命令去操作`kubernetes`资源
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl run nginx-pod --image=nginx:1.17.1 --port=80
|
||||||
|
```
|
||||||
|
|
||||||
|
- 命令式对象配置:通过命令配置和配置文件去操作`kubernetes`资源
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl create/patch -f nginx-pod.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
- 声明式对象配置:通过`apply`命令和配置文件去操作`kubernetes`资源
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl apply -f nginx-pod.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
| 类型 | 操作对象 | 适用环境 | 优点 | 缺点 |
|
||||||
|
| :------------: | :------: | :------: | :------------: | :------------------------------: |
|
||||||
|
| 命令式对象管理 | 对象 | 测试 | 简单 | 只能操作活动对象,无法审计、跟踪 |
|
||||||
|
| 命令式对象配置 | 文件 | 开发 | 可以审计、跟踪 | 项目大时,配置文件多,操作麻烦 |
|
||||||
|
| 声明式对象配置 | 目录 | 开发 | 支持目录操作 | 意外情况下难以调试 |
|
||||||
|
|
||||||
|
#### 1. 命令式对象管理
|
||||||
|
|
||||||
|
**`kubectl`命令**
|
||||||
|
|
||||||
|
`kubectl`是`kubernetes`集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。`kubectl`命令的语法如下:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl [command] [type] [name] [flags]
|
||||||
|
```
|
||||||
|
|
||||||
|
- `comand`:指定要对资源执行的操作,例如`create`、`get`、`delete`
|
||||||
|
- `type`:指定资源类型,比如`deployment`、`pod`、`service`
|
||||||
|
- `name`:指定资源的名称,名称大小写敏感
|
||||||
|
- `flags`:指定额外的可选参数
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看所有pod
|
||||||
|
kubectl get pod
|
||||||
|
|
||||||
|
# 查看某个pod
|
||||||
|
kubectl get pod pod_name
|
||||||
|
|
||||||
|
# 查看某个pod,以yaml格式展示结果
|
||||||
|
kubectl get pod pod_name -o yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
**资源类型**
|
||||||
|
|
||||||
|
`kubernetes`中所有的内容都抽象为资源,可以通过下面的命令进行查看:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl api-resources
|
||||||
|
```
|
||||||
|
|
||||||
|
经常使用的资源有下面这些:
|
||||||
|
|
||||||
|
| 资源分类 | 资源名称 | 缩写 | 资源作用 |
|
||||||
|
| :-------------: | :------------------------: | :------: | :---------------: |
|
||||||
|
| 集群级别资源 | `nodes` | `no` | 集群组成部分 |
|
||||||
|
| `namespaces` | `ns` | 隔离Pod | |
|
||||||
|
| `pod`资源 | `pods` | `po` | 装载容器 |
|
||||||
|
| `pod`资源控制器 | `replicationcontrollers` | `rc` | 控制`pod`资源 |
|
||||||
|
| | `replicasets` | `rs` | 控制`pod`资源 |
|
||||||
|
| | `deployments` | `deploy` | 控制`pod`资源 |
|
||||||
|
| | `daemonsets` | `ds` | 控制`pod`资源 |
|
||||||
|
| | `jobs` | | 控制`pod`资源 |
|
||||||
|
| | `cronjobs` | `cj` | 控制`pod`资源 |
|
||||||
|
| | `horizontalpodautoscalers` | `hpa` | 控制`pod`资源 |
|
||||||
|
| | `statefulsets` | `sts` | 控制`pod`资源 |
|
||||||
|
| 服务发现资源 | `services` | `svc` | 统一`pod`对外接口 |
|
||||||
|
| | `ingress` | `ing` | 统一`pod`对外接口 |
|
||||||
|
| 存储资源 | `volumeattachments` | | 存储 |
|
||||||
|
| | `persistentvolumes` | `pv` | 存储 |
|
||||||
|
| | `persistentvolumeclaims` | `pvc` | 存储 |
|
||||||
|
| | `configmaps` | `cm` | 配置 |
|
||||||
|
| | `secrets` | | 配置 |
|
||||||
|
|
||||||
|
**操作**
|
||||||
|
|
||||||
|
`kubernetes`允许对资源进行多种操作,可以通过`–help`查看详细的操作命令
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl --help
|
||||||
|
```
|
||||||
|
|
||||||
|
经常使用的操作有下面这些:
|
||||||
|
|
||||||
|
| 命令分类 | 命令 | 翻译 | 命令作用 |
|
||||||
|
| :--------: | :------------: | :-----------------------: | :--------------------------: |
|
||||||
|
| 基本命令 | `create` | 创建 | 创建一个资源 |
|
||||||
|
| | `edit` | 编辑 | 编辑一个资源 |
|
||||||
|
| | `get` | 获取 | 获取一个资源 |
|
||||||
|
| | `patch` | 更新 | 更新一个资源 |
|
||||||
|
| | `delete` | 删除 | 删除一个资源 |
|
||||||
|
| | `explain` | 解释 | 展示资源文档 |
|
||||||
|
| 运行和调试 | `run` | 运行 | 在集群中运行一个指定的镜像 |
|
||||||
|
| | `expose` | 暴露 | 暴露资源为Service |
|
||||||
|
| | `describe` | 描述 | 显示资源内部信息 |
|
||||||
|
| | `logs` | 日志输出容器在pod中的日志 | 输出容器在pod中的日志 |
|
||||||
|
| | `attach` | 缠绕进入运行中的容器 | 进入运行中的容器 |
|
||||||
|
| | `exec` | 执行容器中的一个命令 | 执行容器中的一个命令 |
|
||||||
|
| | `cp` | 复制 | 在Pod内外复制文件 |
|
||||||
|
| | `rollout` | 首次展示 | 管理资源的发布 |
|
||||||
|
| | `scale` | 规模 | 扩(缩)容Pod的数量 |
|
||||||
|
| | `autoscale` | 自动调整 | 自动调整`Pod`的数量 |
|
||||||
|
| 高级命令 | `apply` | `rc` | 通过文件对资源进行配置 |
|
||||||
|
| | `label` | 标签 | 更新资源上的标签 |
|
||||||
|
| 其他命令 | `cluster-info` | 集群信息 | 显示集群信息 |
|
||||||
|
| | `version` | 版本 | 显示当前Server和Client的版本 |
|
||||||
|
|
||||||
|
下面以一个`namespace` / `pod`的创建和删除简单演示下命令的使用:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 创建一个namespace
|
||||||
|
[root@master ~]# kubectl create namespace dev
|
||||||
|
namespace/dev created
|
||||||
|
|
||||||
|
# 获取namespace
|
||||||
|
[root@master ~]# kubectl get ns
|
||||||
|
NAME STATUS AGE
|
||||||
|
default Active 21h
|
||||||
|
dev Active 21s
|
||||||
|
kube-node-lease Active 21h
|
||||||
|
kube-public Active 21h
|
||||||
|
kube-system Active 21h
|
||||||
|
|
||||||
|
# 在此namespace下创建并运行一个nginx的Pod
|
||||||
|
[root@master ~]# kubectl run pod --image=nginx:latest -n dev
|
||||||
|
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
|
||||||
|
deployment.apps/pod created
|
||||||
|
|
||||||
|
# 查看新创建的pod
|
||||||
|
[root@master ~]# kubectl get pod -n dev
|
||||||
|
NAME READY STATUS RESTARTS AGE
|
||||||
|
pod 1/1 Running 0 21s
|
||||||
|
|
||||||
|
# 删除指定的pod
|
||||||
|
[root@master ~]# kubectl delete pod pod-864f9875b9-pcw7x
|
||||||
|
pod "pod" deleted
|
||||||
|
|
||||||
|
# 删除指定的namespace
|
||||||
|
[root@master ~]# kubectl delete ns dev
|
||||||
|
namespace "dev" deleted
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. 命令式对象配置
|
||||||
|
|
||||||
|
命令式对象配置就是使用命令配合配置文件一起来操作`kubernetes`资源。
|
||||||
|
|
||||||
|
1)创建一个`nignxpod.yaml`,内容如下:
|
||||||
|
|
||||||
|
```yml
|
||||||
|
# 定义 Namespace(第一部分)
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: dev
|
||||||
|
|
||||||
|
# 用三个短横线分隔多个资源(第二部分)
|
||||||
|
---
|
||||||
|
|
||||||
|
# 定义 Pod(第二部分)
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: nginxpod
|
||||||
|
namespace: dev
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: nginx-containers
|
||||||
|
image: nginx:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
2)执行`create`命令,创建资源:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# kubectl create -f nginxpod.yaml
|
||||||
|
namespace/dev created
|
||||||
|
pod/nginxpod created
|
||||||
|
```
|
||||||
|
|
||||||
|
此时发现创建了两个资源对象,分别是`namespace`和`pod`
|
||||||
|
|
||||||
|
3)执行`get`命令,查看资源:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# kubectl get -f nginxpod.yaml
|
||||||
|
NAME STATUS AGE
|
||||||
|
namespace/dev Active 18s
|
||||||
|
|
||||||
|
NAME READY STATUS RESTARTS AGE
|
||||||
|
pod/nginxpod 1/1 Running 0 17s
|
||||||
|
```
|
||||||
|
|
||||||
|
这样就显示了两个资源对象的信息
|
||||||
|
|
||||||
|
4)执行`delete`命令,删除资源:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# kubectl delete -f nginxpod.yaml
|
||||||
|
namespace "dev" deleted
|
||||||
|
pod "nginxpod" deleted
|
||||||
|
```
|
||||||
|
|
||||||
|
此时发现两个资源对象被删除了
|
||||||
|
|
||||||
|
**总结:**
|
||||||
|
|
||||||
|
命令式对象配置的方式操作资源,可以简单的认为:命令 + yaml配置文件(里面是命令需要的各种参数)
|
||||||
|
|
||||||
|
#### 3. 声明式对象配置
|
||||||
|
|
||||||
|
声明式对象配置跟命令式对象配置很相似,但是它只有一个命令`apply`。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 首先执行一次kubectl apply -f yaml文件,发现创建了资源
|
||||||
|
[root@master ~]# kubectl apply -f nginxpod.yaml
|
||||||
|
namespace/dev created
|
||||||
|
pod/nginxpod created
|
||||||
|
|
||||||
|
# 再次执行一次kubectl apply -f yaml文件,发现说资源没有变动
|
||||||
|
[root@master ~]# kubectl apply -f nginxpod.yaml
|
||||||
|
namespace/dev unchanged
|
||||||
|
pod/nginxpod unchanged
|
||||||
|
```
|
||||||
|
|
||||||
|
**总结:**
|
||||||
|
|
||||||
|
其实声明式对象配置就是使用`apply`描述一个资源最终的状态(在`yaml`中定义状态)
|
||||||
|
|
||||||
|
使用`apply`操作资源:
|
||||||
|
|
||||||
|
- 如果资源不存在,就创建,相当于`kubectl create`
|
||||||
|
- 如果资源已存在,就更新,相当于`kubectl patch`
|
||||||
|
|
||||||
|
**扩展:`kubectl`可以在`node`节点上运行吗?**
|
||||||
|
|
||||||
|
`kubectl`的运行是需要进行配置的,它的配置文件是`$HOME/.kube`,如果想要在`node`节点运行此命令,需要将`master`上的`.kube`文件复制到`node`节点上,即在`master`节点上执行下面操作:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
scp -r HOME/.kube node1: HOME/
|
||||||
|
```
|
||||||
|
|
||||||
|
**使用推荐:三种方式应该怎么用?**
|
||||||
|
|
||||||
|
- 创建/更新资源 使用声明式对象配置`kubectl apply -f xxx.yaml`
|
||||||
|
- 删除资源 使用命令式对象配置`kubectl delete -f xxx.yaml`
|
||||||
|
- 查询资源 使用命令式对象管理`kubectl get(describe) 资源名称`
|
261
kubernetes-集群.md
Normal file
261
kubernetes-集群.md
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
<h2><center>Kubernetes 集群</center></h2>
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
## 一:部署kubernetes 集群
|
||||||
|
|
||||||
|
### 1. 前置知识点
|
||||||
|
|
||||||
|
目前生产部署`Kubernetes`集群主要有两种方式:
|
||||||
|
|
||||||
|
- `kubeadm`
|
||||||
|
|
||||||
|
`Kubeadm`是一个`K8s`部署工具,提供`kubeadm init`和`kubeadm join`,用于快速部署`Kubernetes`集群。
|
||||||
|
|
||||||
|
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
|
||||||
|
|
||||||
|
- 二进制包
|
||||||
|
|
||||||
|
从`github`下载发行版的二进制包,手动部署每个组件,组成`Kubernetes`集群。
|
||||||
|
|
||||||
|
`Kubeadm`降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署`Kubernetes`集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 2. kubeadm 部署方式介绍
|
||||||
|
|
||||||
|
`kubeadm`是官方社区推出的一个用于快速部署`kubernetes`集群的工具,这个工具能通过两条指令完成一个`kubernetes`集群的部署:
|
||||||
|
|
||||||
|
- 创建一个`Master`节点`kubeadm init`
|
||||||
|
- 将`Node`节点加入到当前集群中`$ kubeadm join <Master节点的IP 和端口>`
|
||||||
|
|
||||||
|
### 3. 安装要求
|
||||||
|
|
||||||
|
在开始之前,部署`Kubernetes`集群机器需要满足以下几个条件:
|
||||||
|
|
||||||
|
- 一台或多台机器,操作系统`CentOS7.x-86_x64`
|
||||||
|
- 硬件配置:`2GB`或更多`RAM`,2 个`CPU`或更多`CPU`,硬盘30GB 或更多
|
||||||
|
- 集群中所有机器之间网络互通
|
||||||
|
- 可以访问外网,需要拉取镜像
|
||||||
|
- 禁止`swap`分区
|
||||||
|
|
||||||
|
### 4. 最终目标
|
||||||
|
|
||||||
|
- 在所有节点上安装`Docker`和`kubeadm`
|
||||||
|
- 部署`Kubernetes Master`
|
||||||
|
- 部署容器网络插件
|
||||||
|
- 部署`Kubernetes Node`,将节点加入`Kubernetes`集群中
|
||||||
|
- 部署`Dashboard Web`页面,可视化查看`Kubernetes`资源
|
||||||
|
|
||||||
|
### 5. 准备环境
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
| 节点 | IP地址 | 组件 |
|
||||||
|
| :----: | :-------------: | :-------------------------------: |
|
||||||
|
| master | 192.168.159.130 | docker,kubectl,kubeadm,kubelet |
|
||||||
|
| node1 | 192.168.159.131 | docker,kubectl,kubeadm,kubelet |
|
||||||
|
| node2 | 192.168.159.132 | docker,kubectl,kubeadm,kubelet |
|
||||||
|
|
||||||
|
### 6. 环境初始化
|
||||||
|
|
||||||
|
**主机名解析**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# vim /etc/hosts
|
||||||
|
192.168.159.130 master
|
||||||
|
192.168.159.131 node1
|
||||||
|
192.168.159.132 node2
|
||||||
|
|
||||||
|
注意:
|
||||||
|
所有节点
|
||||||
|
```
|
||||||
|
|
||||||
|
**禁用`iptable`和`firewalld`**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# systemctl stop firewalld
|
||||||
|
[root@master ~]# systemctl disable firewalld
|
||||||
|
|
||||||
|
[root@master ~]# systemctl stop iptables
|
||||||
|
[root@master ~]# systemctl disable iptables
|
||||||
|
|
||||||
|
注意:
|
||||||
|
所有节点
|
||||||
|
```
|
||||||
|
|
||||||
|
**禁止`selinux`**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# setenforce 0
|
||||||
|
[root@master ~]# vim /etc/selinux/config
|
||||||
|
SELINUX=disabled
|
||||||
|
|
||||||
|
注意:
|
||||||
|
所有节点
|
||||||
|
```
|
||||||
|
|
||||||
|
**禁用`swap`分区**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# swapoff -a
|
||||||
|
[root@master ~]# sed -i 's/.*swap.*/#&/' /etc/fstab
|
||||||
|
|
||||||
|
注意:
|
||||||
|
所有节点
|
||||||
|
```
|
||||||
|
|
||||||
|
**加载内核模块**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# modprobe br_netfilter
|
||||||
|
|
||||||
|
[root@master ~]# vim /etc/sysctl.conf
|
||||||
|
net.bridge.bridge-nf-call-ip6tables = 1
|
||||||
|
net.bridge.bridge-nf-call-iptables = 1
|
||||||
|
vm.swappiness=0
|
||||||
|
net.ipv4.ip_forward = 1
|
||||||
|
|
||||||
|
注意:
|
||||||
|
所有节点
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. 安装`docker`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# yum install -y yum-utils
|
||||||
|
[root@master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
|
||||||
|
[root@master ~]# yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
|
||||||
|
|
||||||
|
[root@master ~]# systemctl start docker
|
||||||
|
[root@master ~]# systemctl enable docker
|
||||||
|
|
||||||
|
注意:
|
||||||
|
所有节点
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8. 安装`kubeadm kubelet kubectl`
|
||||||
|
|
||||||
|
**配置`yum`仓库**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# vim /etc/yum.repos.d/kubernetes.repo
|
||||||
|
|
||||||
|
[kubernetes]
|
||||||
|
name=Kubernetes
|
||||||
|
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
|
||||||
|
enabled=1
|
||||||
|
gpgcheck=0
|
||||||
|
repo_gpgcheck=0
|
||||||
|
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
|
||||||
|
|
||||||
|
注意:
|
||||||
|
所有节点
|
||||||
|
```
|
||||||
|
|
||||||
|
**安装**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# yum -y install kubeadm-1.23.5 kubelet-1.23.5 kubectl-1.23.5 ipvsadm
|
||||||
|
|
||||||
|
注意:
|
||||||
|
所有节点
|
||||||
|
```
|
||||||
|
|
||||||
|
**配置`kubelet`的`cgroups`**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# vim /etc/sysconfig/kubelet
|
||||||
|
|
||||||
|
KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1"
|
||||||
|
|
||||||
|
注意:
|
||||||
|
所有节点
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9. 部署镜像
|
||||||
|
|
||||||
|
**下载镜像**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/coredns-v1.8.6.tar
|
||||||
|
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/etcd-3.5.1-0.tar
|
||||||
|
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/flannel-cni.tar
|
||||||
|
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/flannel-v0.14.0-amd64.tar
|
||||||
|
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/flannel.tar
|
||||||
|
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/kube-apiserver-v1.23.5.tar
|
||||||
|
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/kube-controller-manager-v1.23.5.tar
|
||||||
|
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/kube-proxy-v1.23.5.tar
|
||||||
|
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/kube-scheduler-v1.23.5.tar
|
||||||
|
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/pause-3.6.tar
|
||||||
|
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/kube-flannel-2402.yml
|
||||||
|
|
||||||
|
注意:
|
||||||
|
所有节点
|
||||||
|
```
|
||||||
|
|
||||||
|
**镜像导入**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# vim image_load.sh
|
||||||
|
#!/bin/bash
|
||||||
|
image_path=`pwd`
|
||||||
|
for i in `ls "${image_path}"`; do
|
||||||
|
docker load < $i
|
||||||
|
done
|
||||||
|
|
||||||
|
[root@master ~]# bash image_load.sh
|
||||||
|
注意:
|
||||||
|
所有节点
|
||||||
|
```
|
||||||
|
|
||||||
|
### 10. `master`节点初始化
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# kubeadm init --kubernetes-version=1.23.5 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.159.130
|
||||||
|
|
||||||
|
Your Kubernetes control-plane 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
|
||||||
|
|
||||||
|
Alternatively, if you are the root user, you can run:
|
||||||
|
|
||||||
|
export KUBECONFIG=/etc/kubernetes/admin.conf
|
||||||
|
|
||||||
|
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/
|
||||||
|
|
||||||
|
Then you can join any number of worker nodes by running the following on each as root:
|
||||||
|
|
||||||
|
kubeadm join 192.168.159.130:6443 --token vxpoqx.jfxg9ae302d2e1j9 \
|
||||||
|
--discovery-token-ca-cert-hash sha256:3b77859462fbcdc312a158e02c77e60e28d41440801fed3cdee1556029a8547a
|
||||||
|
|
||||||
|
|
||||||
|
[root@master ~]# mkdir -p $HOME/.kube
|
||||||
|
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
|
||||||
|
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
||||||
|
[root@master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
|
||||||
|
[root@master ~]# kubectl apply -f kube-flannel-2402.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
### 11. 将`node`加入工作节点
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@node1/2/3 ~]# kubeadm join 192.168.159.130:6443 --token vxpoqx.jfxg9ae302d2e1j9 --discovery-token-ca-cert-hash sha256:3b77859462fbcdc312a158e02c77e60e28d41440801fed3cdee1556029a8547a
|
||||||
|
```
|
||||||
|
|
||||||
|
### 12. `master`节点查看集群状态
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[root@master ~]# kubectl get nodes
|
||||||
|
NAME STATUS ROLES AGE VERSION
|
||||||
|
master Ready control-plane,master 3m11s v1.23.5
|
||||||
|
node1 Ready <none> 27s v1.23.5
|
||||||
|
node2 Ready <none> 43s v1.23.5
|
||||||
|
```
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user