K8S技术介绍及单机部署原理

Kubernetes(简称K8S)是一个用于自动部署、扩展和管理容器化应用程序的开源平台。它提供了一个强大的容器编排功能,能够实现应用程序的自动化部署、弹性伸缩、应用程序间的负载均衡、存储与网络的隔离、故障自愈等功能。Kubernetes使用容器化技术来将应用程序与相关依赖项打包到一个可移植的、自包含的单元中,并将其都部署到几乎任何基础设施上。

本文将介绍Kubernetes的关键概念和单机部署的原理,并给出相关的代码示例,以帮助刚入行的小白了解Kubernetes的使用。

一、 K8S关键概念

在开始讲解Kubernetes的单机部署原理前,我们先来了解一些Kubernetes的关键概念。

1. Pod:Pod是Kubernetes的最小部署单元,是一个或多个相关容器的组合。在一个Pod中,所有的容器共享相同的网络命名空间和存储空间,并且可以通过loaclhost方式相互通信。

2. Deployment:Deployment是用于定义应用程序的部署方式的资源对象。它提供了应用程序副本的自动化管理、升级和扩缩容等功能。

3. Service:Service是一个集合的Pod的逻辑分组。它提供了一个稳定的网络终结点,可以通过这个终结点访问集群内的Pod。

4. Node:Node是Kubernetes集群的工作节点,它可以是物理机器或者虚拟机。Node负责运行Pod,并通过Kubelet组件来与Master节点进行通信。

5. Master:Master是Kubernetes集群的控制中心,它负责调度和管理集群中的各个工作节点。Master包含多个核心组件,如API Server、Controller Manager、Scheduler等。

二、 单机部署Kubernetes的原理

下面我们将介绍如何在单机上部署Kubernetes,并通过一个简单的示例来验证它的功能。

1. 安装Docker

Docker是容器化应用程序的基础,因此我们首先需要安装Docker。

```bash
sudo apt-get update
sudo apt-get install docker.io -y
```

2. 安装Kubernetes的Master节点

首先,我们需要安装kubeadm、kubelet和kubectl等工具。

```bash
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
```

然后,我们可以通过指令来初始化Master节点。

```bash
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
```

初始化完成后,我们可以看到输出中有一个类似于`kubeadm join`的指令,我们需要将其复制下来,后面会用到。

3. 部署网络插件

在Kubernetes集群中,Pod需要通过网络进行通信,因此我们需要部署一个网络插件。

```bash
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
```

4. 加入工作节点

在部署Master节点之后,我们需要将工作节点加入到集群中。在工作节点上执行之前复制的`kubeadm join`指令即可。

5. 验证部署结果

现在,我们可以通过kubectl指令来验证部署结果。

```bash
sudo kubectl get nodes
```

如果输出中有两个节点,并且状态都为Ready,则表示我们的部署成功。

三、 示例代码

下面我们以一个简单的示例来演示Kubernetes的使用。我们将创建一个Deployment和一个Service,通过Service来访问Deployment中的Pod。

1. 创建一个Deployment

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
```

通过上述代码,我们定义了一个名为`nginx-deployment`的Deployment,它由3个副本的Pod组成,每个Pod都运行着一个nginx容器。

2. 创建一个Service

```yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: LoadBalancer
```

通过上述代码,我们定义了一个名为`nginx-service`的Service,它通过selector找到`app: nginx`标签的Pod,并将流量转发到这些Pod上的80端口。

四、 总结

通过本文,我们了解了Kubernetes的关键概念和单机部署原理,并通过一个简单的示例演示了Kubernetes的使用。希望本文能够帮助刚入行的小白快速上手Kubernetes,并为后续的学习和实践打下坚实的基础。