本次分享一下如何在Centos8上面使用Docker,以及Docker的相关基本操作,以及使用minikube搭建一个简单的K8s集群

废话不多说现在开始

1. 基础配置

image-20240131142942362

这是我Centos8虚拟机配置,因为运行minikube至少需要2G内存所以这里最少要给4GB的内存硬盘大小最好不要少于20GB。

用户最少有一个普通用户,因为运行minikube不允许root用户运行的。

2. 配置yum源并安装docker

1. 配置yum源

首先要配置yum源

cd  /etc/yum.repos.d/
mv * CentOS8.repo.bak
curl -o http://mirrors.aliyun.com/repo/Centos-8.repo
yum makecache
yum update
yum upgrade

2. 安装docker

安装docker所需依赖:

yum install -y yum-utils device-mapper-persistent-data lvm2

添加阿里云的仓库:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker:

yum -y install docker-ce

启动Docker并设置开机自启

systemctl start docker
systemctl enable docker

配置Docker仓库镜像源

[gzh@gzh-docker ~]$ cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}

没有daemon.json的创建一个

重启服务查看是否配置成功

[gzh@gzh-docker ~]$ systemctl restart docker
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
重新启动“docker.service”需要认证。
Authenticating as: root
Password: 
==== AUTHENTICATION COMPLETE ====
[gzh@gzh-docker ~]$ docker info
Client: Docker Engine - Community
......
 Registry Mirrors:
  https://docker.mirrors.ustc.edu.cn/
 Live Restore Enabled: false

3. Docker镜像操作

3.1 拉取base镜像

能称作base镜像的通常都是各种Linux发行版的Docker镜像,比如Ubuntu、Debian、CentOS等

拉取镜像之前先搜索你想要的镜像名称,然后根据需求进行拉取,这里以centos为例

[root@gzh-docker ~]# docker search centos
NAME                               DESCRIPTION                                      STARS     OFFICIAL
centos                             DEPRECATED; The official build of CentOS.        7713      [OK]
kasmweb/centos-7-desktop           CentOS 7 desktop for Kasm Workspaces             43        
bitnami/centos-base-buildpack      Centos base compilation image                    0         
dokken/centos-7                    CentOS 7 image for kitchen-dokken                6         
dokken/centos-8                    CentOS 8 image for kitchen-
...
docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

那这些base镜像是干什么呢?

Linux操作系统由内核空间和用户空间组成,对于Base镜像来说,底层直接用Host的kernel,自己只需要提供rootfs就可以了。也就是说这些基础镜像都有自己的文件系统,当他们运行的时候都会运行在一个内核上面,这也是为什么base镜像小的原因。

3.安装minikube并配置kubectl 命令自动补全

1.安装minikube

下载minikube命令行工具minikube-linux-amd64,重命名minikube 赋予执行权限并且移动到/usr/local/bin/目录下

curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.18.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

执行minikube初始化,其它参数使用默认值

我现在使用的是普通用户,如果使用root用户启动minikube的话会报错:

[root@gzh-docker gzh]# minikube start --driver=docker
😄  Centos 8.4.2105 上的 minikube v1.18.1
🎉  minikube 1.28.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.28.0
💡  To disable this notice, run: 'minikube config set WantUpdateNotification false'

✨  根据用户配置使用 docker 驱动程序
🛑  The "docker" driver should not be used with root privileges.
💡  If you are running minikube within a VM, consider using --driver=none:
📘    https://minikube.sigs.k8s.io/docs/reference/drivers/none/

❌  Exiting due to DRV_AS_ROOT: The "docker" driver should not be used with root privileges.

所以我们要切换到普通用户并且将我们的普通用户添加到docker组里面

sudo usermod -aG docker $USER && newgrp docker

启动minikube

[gzh@gzh-docker ~]$ minikube start --driver=docker
😄  Centos 8.4.2105 上的 minikube v1.18.1
✨  根据现有的配置文件使用 docker 驱动程序
👍  Starting control plane node minikube in cluster minikube
🔄  Restarting existing docker container for "minikube" ...
🎉  minikube 1.28.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.28.0
💡  To disable this notice, run: 'minikube config set WantUpdateNotification false'

🐳  正在 Docker 20.10.3 中准备 Kubernetes v1.23.8…
🔎  Verifying Kubernetes components...
    ▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v4 (global image repository)
🌟  Enabled addons: default-storageclass, storage-provisioner

❗  /usr/bin/kubectl is version 1.28.2, which may have incompatibilites with Kubernetes 1.23.8.
    ▪ Want kubectl v1.23.8? Try 'minikube kubectl -- get pods -A'
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

其他参数:

--image-mirror-country cn 将缺省利用 registry.cn-hangzhou.aliyuncs.com/google_containers 作为安装Kubernetes的容器镜像仓库 (阿里云版本可选)
--iso-url=*** 利用阿里云的镜像地址下载相应的 .iso 文件 (阿里云版本可选)
--registry-mirror=***为了拉取Docker Hub镜像,需要为 Docker daemon 配置镜像加速,参考阿里云镜像服务
--cpus=2: 为minikube虚拟机分配CPU核数,默认2个
--memory=2048mb: 为minikube虚拟机分配内存数,默认2G
--kubernetes-version=***: minikube 虚拟机将使用的 kubernetes 版本

文件会下载到.kube.minikube两个文件夹里面

[gzh@gzh-docker ~]$ ls -l .kube/
总用量 4
drwxr-x---. 4 gzh gzh  35 1月  30 00:19 cache
-rw-------. 1 gzh gzh 818 1月  31 01:46 config
[gzh@gzh-docker ~]$ ls -l .minikube/
总用量 32
drwxrwxr-x. 2 gzh gzh    6 1月  30 00:07 addons
drwxrwxr-x. 5 gzh gzh   44 1月  30 00:11 cache
-rw-r--r--. 1 gzh gzh 1111 1月  30 00:15 ca.crt
-rw-------. 1 gzh gzh 1675 1月  30 00:15 ca.key
-rwxrwxr-x. 1 gzh gzh 1070 1月  31 01:46 ca.pem
-rwxrwxr-x. 1 gzh gzh 1115 1月  31 01:46 cert.pem
drwxrwxr-x. 2 gzh gzh   69 1月  30 00:10 certs
drwxrwxr-x. 2 gzh gzh   25 1月  30 00:14 config
drwxrwxr-x. 2 gzh gzh    6 1月  30 00:07 files
-rwxrwxr-x. 1 gzh gzh 1675 1月  31 01:46 key.pem
-rw-r--r--. 1 gzh gzh   29 1月  31 01:46 last_update_check
drwxr-xr-x. 2 gzh gzh   45 1月  30 00:14 logs
-rw-------. 1 gzh gzh    0 1月  30 00:10 machine_client.lock
drwxrwxr-x. 3 gzh gzh   62 1月  30 00:14 machines
drwxrwxr-x. 3 gzh gzh   22 1月  30 00:14 profiles
-rw-r--r--. 1 gzh gzh 1119 1月  30 00:15 proxy-client-ca.crt
-rw-------. 1 gzh gzh 1675 1月  30 00:15 proxy-client-ca.key

2.安装kubectl

看启动提示里面有

❗  /usr/bin/kubectl is version 1.28.2, which may have incompatibilites with Kubernetes 1.23.8.
    ▪ Want kubectl v1.23.8? Try 'minikube kubectl -- get pods -A'

看提示说kubectl没有安装,可以用 minikube kubectl -- 来替代

我们来安装kubectl

添加kubernetes阿里源

[gzh@gzh-docker ~]$ sudo cat /etc/yum.repos.d/Centos-8.repo 
[sudo] gzh 的密码:
# CentOS-Base.repo
......
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

安装kubectl

sudo yum -y install kubectl

3.将kubectl替换掉minikube kubectl -- 命令

[gzh@gzh-docker ~]$ cat .bashrc
# .bashrc
......
alias kubectl="minikube kubectl --"
[gzh@gzh-docker ~]$ source ~/.bashrc

查看所有pod

[gzh@gzh-docker ~]$ kubectl get pod -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS      AGE
kube-system   coredns-65c54cc984-znk2d           1/1     Running   1 (17m ago)   25h
kube-system   etcd-minikube                      1/1     Running   1 (17m ago)   25h
kube-system   kube-apiserver-minikube            1/1     Running   1 (17m ago)   25h
kube-system   kube-controller-manager-minikube   1/1     Running   1 (17m ago)   25h
kube-system   kube-proxy-84xts                   1/1     Running   1 (17m ago)   25h
kube-system   kube-scheduler-minikube            1/1     Running   1 (17m ago)   25h
kube-system   storage-provisioner                1/1     Running   3 (17m ago)   25h

以上等价于

[gzh@gzh-docker ~]$ minikube kubectl -- get pods -A 
NAMESPACE     NAME                               READY   STATUS    RESTARTS      AGE
kube-system   coredns-65c54cc984-znk2d           1/1     Running   1 (17m ago)   25h
kube-system   etcd-minikube                      1/1     Running   1 (17m ago)   25h
kube-system   kube-apiserver-minikube            1/1     Running   1 (17m ago)   25h
kube-system   kube-controller-manager-minikube   1/1     Running   1 (17m ago)   25h
kube-system   kube-proxy-84xts                   1/1     Running   1 (17m ago)   25h
kube-system   kube-scheduler-minikube            1/1     Running   1 (17m ago)   25h
kube-system   storage-provisioner                1/1     Running   3 (16m ago)   25h

4.设置kubectl 命令自动补全

安装 bash-completion:

yum install -y bash-completion

执行 source 命令:

source /usr/share/bash-completion/bash_completion

如果想让系统中的所有用户都能拥有命令补全的功能,则执行如下命令:

kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null

如果只需要当前用户拥有命令自动补全功能,则执行如下命令:

echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc

验证自动补全的效果(双击 Tab 键):

[gzh@gzh-docker ~]$ kubectl 
alpha          autoscale      create         exec           logs           rollout        version
annotate       certificate    debug          explain        options        run            wait
api-resources  cluster-info   delete         expose         patch          scale          
api-versions   completion     describe       get            plugin         set            
apply          config         diff           help           port-forward   taint          
attach         cordon         drain          kustomize      proxy          top            
auth           cp             edit           label          replace        uncordon     

到这里安装基本结束了,就可以开心的完Docker了。如果安装配置过程中有什么问题可以在文章下面评论😀