Kubernetes(k8s)介绍
Kubernetes(简称 K8s)是一个用于自动部署、扩展和管理容器化应用程序的开源系统,由 Google 公司发起并贡献给 Cloud Native Computing Foundation(CNCF)。它提供了跨多个主机的容器编排和管理功能,具有以下主要特点和优势:
特点
自动化部署与扩展:可以根据预设的规则自动部署应用程序的多个副本,并根据负载情况动态调整副本数量,实现自动伸缩。
自我修复:监控容器的运行状态,当容器出现故障时,自动重启或替换容器,确保应用的高可用性。
服务发现与负载均衡:为应用程序提供内部的服务发现机制,使得不同的容器之间可以方便地进行通信,同时还能对流量进行负载均衡,提高应用的性能和可靠性。
存储编排:支持多种存储系统,如本地存储、网络存储等,可以方便地为应用程序挂载存储卷,实现数据的持久化。
滚动更新与回滚:在更新应用程序时,可以进行滚动更新,逐步替换旧版本的容器,同时如果更新过程中出现问题,还可以快速回滚到上一个稳定版本。
密钥与配置管理:可以安全地管理应用程序所需的敏感信息(如密钥、证书等)和配置文件,避免将这些信息硬编码在容器镜像中。
应用场景
Kubernetes 广泛应用于云原生应用开发、微服务架构、大数据处理等领域,帮助企业更高效地管理和运行容器化应用程序。
Kubernetes 安装
以下以在 Ubuntu 系统上使用 kubeadm
工具安装单节点 Kubernetes 集群为例进行详细介绍。
1. 环境准备
节点要求:至少一台具有 2GB 以上内存、2 个以上 CPU 核心的服务器或虚拟机,操作系统为 Ubuntu 18.04 及以上版本。
网络配置:确保节点之间网络连通,并且可以访问外网以拉取所需的镜像和软件包。
2. 关闭交换空间
交换空间会影响 Kubernetes 节点的性能,需要将其关闭。
收起
bash
sudo swapoff -a
# 永久关闭交换空间,编辑 /etc/fstab 文件,注释掉包含 swap 的行
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
3. 安装 Docker
Kubernetes 默认使用 Docker 作为容器运行时,需要先安装 Docker。
收起
bash
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新软件包列表
sudo apt-get update
# 安装 Docker 引擎
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 配置 Docker 使用 systemd 作为 cgroup 驱动
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
# 重启 Docker 服务
sudo systemctl restart docker
4. 安装 kubeadm、kubelet 和 kubectl
收起
bash
# 添加 Kubernetes 软件源
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
# 更新软件包列表
sudo apt-get update
# 安装 kubeadm、kubelet 和 kubectl
sudo apt-get install -y kubelet kubeadm kubectl
# 锁定软件包版本,防止自动更新
sudo apt-mark hold kubelet kubeadm kubectl
5. 初始化 Kubernetes 集群
收起
bash
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
--pod-network-cidr
:指定 Pod 网络的 IP 地址范围,这里使用的是 Flannel 网络插件的默认地址范围。
初始化成功后,会输出类似以下的信息:
收起
plaintext
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
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 <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
按照提示,执行以下命令来配置 kubectl
:
收起
bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
6. 安装网络插件
这里以 Flannel 为例,安装网络插件以实现 Pod 之间的通信。
收起
bash
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
7. 验证集群状态
收起
bash
kubectl get nodes
如果输出显示节点状态为 Ready
,则表示集群安装成功。
8. (可选)添加工作节点
如果需要添加更多的工作节点到集群中,可以在工作节点上执行 kubeadm join
命令,该命令在 kubeadm init
时已经输出。例如:
收起
bash
kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>