前提说明:
实验使用的操作系统版本: Ubuntu 18.04 LTS (GNU/Linux 4.15.0-175-generic x86_64)
Kubernetes(工具)版本:kubectl v1.22.3 、 kubeadm v1.22.3 、kubelet v1.22.3、minikube、kind v0.12.0
1 环境准备
1.1 Ubuntu虚拟机
具体步骤可以省略了吧,不会的可以留言下哦
1.2 Ubuntu安装Docker
(1)安装步骤
- 查看操作系统版本和Linux内核版本是否符合要求
$ lsb_release -a $ cat /proc/version 复制代码
- 删除旧版本Docker
$ sudo apt-get remove docker docker-engine docker.io containerd runc 复制代码
- 更新apt仓库
$ sudo apt-get update 复制代码
- 安装一些可能用到的插件
$ sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release 复制代码
- 添加Docker官方的gpg密钥
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg 复制代码
- 设置stable仓库
$ 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 复制代码
- 更新apt仓库,安装最新版本的Docker Engine和containerd
$ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io 复制代码
(2)具体操作
yanmingxin@machine:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04 LTS Release: 18.04 Codename: bionic yanmingxin@machine:~$ cat /proc/version Linux version 4.15.0-20-generic (buildd@lgw01-amd64-039) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) yanmingxin@machine:~$ sudo apt-get remove docker docker-engine docker.io containerd runc [sudo] yanmingxin 的密码: ...... yanmingxin@machine:~$ sudo apt-get update ...... 正在读取软件包列表... 完成 yanmingxin@machine:~$ sudo apt-get install \ > ca-certificates \ > curl \ > gnupg \ > lsb-release .... 篇幅过长,以下省略 复制代码
1.3 Ubuntu安装kubectl、kubeadm、kubelet、kind、minikube
1.3.1 kubectl、kubeadm、 kubelet
更新 apt
包索引,并安装使用 Kubernetes apt
仓库所需要的包:
$ sudo apt-get update $ sudo apt-get install -y apt-transport-https ca-certificates curl 复制代码
下载 Google Cloud 公开签名秘钥:
$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpgc 复制代码
添加 Kubernetes apt
仓库:
$ echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list 复制代码
更新 apt
包索引,使之包含新的仓库并安装 kubectl:
$ sudo apt-get update $ sudo apt install kubeadm=1.22.3-00 $ sudo apt install kubectl=1.22.3-00 $ sudo apt install kubelet=1.22.3-00 复制代码
PS:如果要卸载当前版本安装其他版本,可以停止进程并先执行:
apt remove kubelet kubectl kubeadm
再按照上述步骤进行安装
1.3.2 kind
$ curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.12.0/kind-linux-amd64 复制代码
再将下载的文件放到环境变量$PATH所在的目录下
1.3.3 minikube
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 $ sudo install minikube-linux-amd64 /usr/local/bin/minikube 复制代码
2 使用minikube部署Kubernetes集群
总结大致步骤:
- 根据镜像创建Deployment(Deployment 是管理应用副本的 API 对象,通常通过运行没有本地状态的Pods来实现。)
- 部署Node并暴露端口
- 进行服务访问测试
- 查看状态
root@machine:/home/yanmingxin# kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4 deployment.apps/hello-minikube created root@machine:/home/yanmingxin# kubectl expose deployment hello-minikube --type=NodePort --port=8080 service/hello-minikube exposed root@machine:/home/yanmingxin# kubectl get services hello-minikube NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-minikube NodePort 10.12.19.101 <none> 8080:31555/TCP 8s root@machine:/home/yanmingxin# minikube service hello-minikube root@machine:/home/yanmingxin# kubectl port-forward service/hello-minikube 7080:8080 Forwarding from 127.0.0.1:7080 -> 8080 Forwarding from [::1]:7080 -> 8080 复制代码
启动另一个终端测试
root@machine:/home/yanmingxin# curl http://localhost:7080/ CLIENT VALUES: client_address=127.0.0.1 command=GET real path=/ ...... root@machine:/home/yanmingxin# kubectl get po -A NAMESPACE NAME READY STATUS RESTARTS AGE default hello-minikube-xxxxxxxxx 1/1 Running 0 26m 复制代码
3 使用kubeadm一键部署Kubernetes集群
3.1 简单说明
此次使用kubeadm是使用yaml文件的方式,以下是在网上找的具体步骤和一些创建集群过程说明和排错积累的经验:
(1)基本步骤:
- 编写所需集群yaml文件
- 根据yaml文件初始化Kubernetes集群
- 做集群配置
- 查看和管理集群
(2)需要注意的地方
- 针对比较新版本(可能在1.20.x以上)的kubeadm,使用yum 安装kubeadm和docker后,这俩使用的cgroup驱动不一致。需要在指定docker的cgroup驱动为system。添加如下配置文件,并重启docker
vim /etc/docker/daemon.json # 文件内容: { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" } } 复制代码
- kubeadm初始化集群需要在root权限下进行,并且要禁用swap分区
3.2 具体操作
root@machine:/home/yanmingxin/k8s_learn# vim kubeadm.yaml #----------- 文件内容------------ apiVersion: kubeadm.k8s.io/v1beta3 #版本 kind: ClusterConfiguration kubernetesVersion: 1.22.3 #版本,与kubeadm对应 imageRepository: registry.aliyuncs.com/google_containers #配置国内镜像 apiServer: extraArgs: runtime-config: "api/all=true" controllerManager: extraArgs: horizontal-pod-autoscaler-sync-period: "10s" node-monitor-grace-period: "10s" etcd: local: dataDir: /data/k8s/etcd #----------- 文件内容------------ root@machine:/home/yanmingxin/k8s_learn# kubeadm init --config kubeadm.yaml [init] Using Kubernetes version: v1.22.3 ...... Your Kubernetes control-plane has initialized successfully! ...... root@machine:/home/yanmingxin/k8s_learn# mkdir -p $HOME/.kube root@machine:/home/yanmingxin/k8s_learn# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config root@machine:/home/yanmingxin/k8s_learn# sudo chown $(id -u):$(id -g) $HOME/.kube/config root@machine:/home/yanmingxin/k8s_learn# kubectl get nodes NAME STATUS ROLES AGE VERSION kind-control-plane Ready control-plane,master 6s v1.23.4 复制代码
PS:如果配置文件或版本导致集群初始化报错,可以使用
kubeadm reset -f
命令进行重置操作,会清除相关文件,生产环境下慎用!!!
4 使用kind部署Kubernetes集群
基本步骤:
- 构建镜像
- 使用镜像初始化集群
- 查看和管理集群
实际使用:
root@machine:/usr# kind create cluster Creating cluster "kind" ... ✓ Ensuring node image (kindest/node:v1.23.4) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 ...... root@machine:/usr# kind get clusters kind root@machine:/usr# kind create cluster --name kind-2 Creating cluster "kind" ... ✓ Ensuring node image (kindest/node:v1.23.4) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 ...... root@machine:/usr/local# kind get clusters kind kind-2 复制代码
PS:由以上简单的使用我们发现了什么?
网络异常,图片无法展示|
仔细看下这个过程,再回顾下我们上节学习的Kubernetes组件,发现了Kubernetes集群的初始化创建过程并不是那么庞然大物,也是从一个镜像的构建,到节点的初始化再到配置的引入一步一步进行的,由小到大的进行。
5 总结
回顾一下,因为本人也是初次学习,由于环境限制和经验的不足,对Kubernetes集群初始化的演示过程比较的片面和笼统,因此还希望读者能见谅并指出不足,当然相比集群的搭建过程,对基础知识和概念的掌握和实际的使用可能更为重要,所以下次争取发一次比较精细化的Kubernetes使用教程,敬请期待!
参考:
minikube.sigs.k8s.io/docs/start/