云原生之容器编排实践-在CentOS7上安装minikube

简介: 云原生之容器编排实践-在CentOS7上安装minikube

647AORJ7Y1O[8}(29)FBK(H.png

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情


背景


前面做了一些基础的铺垫后,终于进入正题了。


作为初学者,为避免在裸金属主机上搭建 Kubernetes 集群的复杂度,以及使用云服务商提供的容器编排服务的一脸懵逼等打击信心的深坑,建议使用 minikube 来进入 Kubernetes 的世界。


系统环境


采用一台虚拟机进行实践。。


  • 系统信息


[root@k8s0 local]# uname -a
Linux k8s0 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@k8s0 local]# cat /proc/version
Linux version 3.10.0-1127.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Mar 31 23:36:51 UTC 2020
[root@k8s0 local]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
  • 配置信息


内存:4G
处理器:2*2
硬盘:100G

安装Minikube


前提是需要具备 Docker 环境


[root@k8s0 ~]# docker -v
Docker version 20.10.17, build 100c701
[root@k8s0 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: https://docs.docker.com
[root@k8s0 ~]# systemctl start docker
[root@k8s0 ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@k8s0 ~]# systemctl stop firewalld
[root@k8s0 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

下载安装并启动


curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

按照官方文档:minikube.sigs.k8s.io/docs/start/…minikube start 就结束战斗了。然而,我就是死活起不来,报出各种错误。

后来,参考了 GitHub 上的 Issuegithub.com/kubernetes/…Kubernetes 的版本号就可以启动了。


minikube start --force --kubernetes-version=v1.23.1

不过,如果关闭防火墙后没有重启Docker,就会遇到下面的错误信息。


Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-af6aa0eafdec -j RETURN: iptables: No chain/target/match by that name.

解决方案:关闭防火墙后需要重启 Docker 服务,然后再指定 Kubernetes 的版本号启动 minikube 即可。


[root@k8s0 local]# systemctl restart docker
[root@k8s0 local]# minikube start --force --kubernetes-version=v1.23.1
* Centos 7.8.2003 上的 minikube v1.26.0
! minikube skips various validations when --force is supplied; this may lead to unexpected behavior
* 自动选择 docker 驱动。其他选项:none, ssh
* The "docker" driver should not be used with root privileges. If you wish to continue as root, use --force.
* If you are running minikube within a VM, consider using --driver=none:
*   https://minikube.sigs.k8s.io/docs/reference/drivers/none/
* Using Docker driver with root privileges
* Starting control plane node minikube in cluster minikube
* Pulling base image ...
    > index.docker.io/kicbase/sta...: 0 B [_____________________] ?% ? p/s 2m1s
! minikube was unable to download gcr.io/k8s-minikube/kicbase:v0.0.32, but successfully downloaded docker.io/kicbase/stable:v0.0.32 as a fallback image
* Creating docker container (CPUs=2, Memory=2200MB) ...
! This container is having trouble accessing https://k8s.gcr.io
* To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
* 正在 Docker 20.10.17 中准备 Kubernetes v1.23.1…
  - Generating certificates and keys ...
  - Booting up control plane ...
  - Configuring RBAC rules ...
* Verifying Kubernetes components...
  - Using image gcr.io/k8s-minikube/storage-provisioner:v5
* Enabled addons: default-storageclass, storage-provisioner
* kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

安装kubectl


直接通过 kubectl 命令无法访问,可通过 minikube kubectl 或者单独安装 kubectl ,或者起别名: alias kubectl="minikube kubectl --"

下载地址:kubernetes.io/docs/tasks/…


[root@k8s0 local]# kubectl get node
-bash: kubectl: 未找到命令
[root@k8s0 local]# minikube kubectl -- get pods -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS       AGE
kube-system   coredns-64897985d-rcrjq            1/1     Running   0              8m31s
kube-system   etcd-minikube                      1/1     Running   0              8m43s
kube-system   kube-apiserver-minikube            1/1     Running   0              8m43s
kube-system   kube-controller-manager-minikube   1/1     Running   0              8m43s
kube-system   kube-proxy-6ffnk                   1/1     Running   0              8m32s
kube-system   kube-scheduler-minikube            1/1     Running   0              8m43s
kube-system   storage-provisioner                1/1     Running   1 (8m9s ago)   8m40s
# 下载安装kubectl
[root@k8s0 local]# curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   154  100   154    0     0    217      0 --:--:-- --:--:-- --:--:--   217
100 43.5M  100 43.5M    0     0  7820k      0  0:00:05  0:00:05 --:--:-- 10.1M
[root@k8s0 local]# install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 查看版本,验证安装
[root@k8s0 local]# kubectl version --client
WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short.  Use --output=yaml|json to get the full version.
Client Version: version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.3", GitCommit:"aef86a93758dc3cb2c658dd9657ab4ad4afc21cb", GitTreeState:"clean", BuildDate:"2022-07-13T14:30:46Z", GoVersion:"go1.18.3", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v4.5.4

minikube基本使用


kubectl 是一个用来跟 K8S 集群进行交互的命令行工具。显然,这里只有一个节点。

常用控制命令


# 查看节点
[root@k8s0 local]# kubectl get node
NAME       STATUS   ROLES                  AGE   VERSION
minikube   Ready    control-plane,master   10m   v1.23.1
# 启动集群
minikube start
# 停止集群
minikube stop
# 清空集群
minikube delete --all
# 安装集群可视化 Web UI 控制台
minikube dashboard

Dashboard


* 正在开启 dashboard ...
  - Using image kubernetesui/dashboard:v2.6.0
  - Using image kubernetesui/metrics-scraper:v1.0.8
* 正在验证 dashboard 运行情况 ...
* Launching proxy ...
* 正在验证 proxy 运行状况 ...

http://127.0.0.1:36124/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/# 新开一个tab[root@k8s0 ~]# kubectl proxy --port=8000 --address='192.168.44.142' --accept-hosts='^.*' &


         

然后通过链接访问:http://192.168.44.142:8000/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/workloads?namespace=default


[7WC62YH8ZV`UIM}B0G8%0V.png

部署应用

[root@k8s0 ~]# kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
# 查看pod
[root@k8s0 ~]# kubectl get pod
NAME                              READY   STATUS             RESTARTS   AGE
hello-minikube-7bc9d7884c-bz4q8   0/1     ImagePullBackOff   0          51s
# 状态错误:ErrImagePull
[root@k8s0 ~]# kubectl get pod
NAME                              READY   STATUS         RESTARTS   AGE
hello-minikube-7bc9d7884c-bz4q8   0/1     ErrImagePull   0          56s
# 排查原因,查看事件
[root@k8s0 ~]# kubectl get events
5m43s       Warning   Failed                    pod/hello-minikube-7bc9d7884c-bz4q8    Error: ErrImagePull
5m32s       Normal    BackOff                   pod/hello-minikube-7bc9d7884c-bz4q8    Back-off pulling image "k8s.gcr.io/echoserver:1.4"
5m32s       Warning   Failed                    pod/hello-minikube-7bc9d7884c-bz4q8    Error: ImagePullBackOff
6m52s       Warning   Failed                    pod/hello-minikube-7bc9d7884c-bz4q8    Failed to pull image "k8s.gcr.io/echoserver:1.4": rpc error: code = Unknown desc = Error response from daemon: Get "https://k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
49m         Normal    SuccessfulCreate          replicaset/hello-minikube-7bc9d7884c   Created pod: hello-minikube-7bc9d7884c-bz4q8

从事件信息中可以看到,拉取镜像失败,怀疑是网络问题。以下我们改为国内容器镜像进行拉取部署。


# 先删除deployment和pod
[root@k8s0 ~]# kubectl get pod
NAME                              READY   STATUS         RESTARTS   AGE
hello-minikube-7bc9d7884c-bz4q8   0/1     ErrImagePull   0          41m
[root@k8s0 ~]# kubectl get deployment
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
hello-minikube   0/1     1            0           44m
[root@k8s0 ~]# kubectl delete deployment hello-minikube
deployment.apps "hello-minikube" deleted
[root@k8s0 ~]# kubectl get deployment
No resources found in default namespace.
[root@k8s0 ~]# kubectl get pod
NAME                              READY   STATUS        RESTARTS   AGE
hello-minikube-7bc9d7884c-bz4q8   0/1     Terminating   0          45m
[root@k8s0 ~]# kubectl get pod
No resources found in default namespace.
# 更改为国内镜像,重新部署应用,成功
[root@k8s0 ~]# kubectl create deployment hello-minikube --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.4
deployment.apps/hello-minikube created
[root@k8s0 ~]# kubectl get deployment
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
hello-minikube   0/1     1            0           12s
[root@k8s0 ~]# kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
hello-minikube-58647b77b8-srpbq   1/1     Running   0          18s

暴露并访问服务


# 将部署暴露为服务
[root@k8s0 ~]# minikube service hello-minikube
|-----------|----------------|-------------|---------------------------|
| NAMESPACE |      NAME      | TARGET PORT |            URL            |
|-----------|----------------|-------------|---------------------------|
| default   | hello-minikube |        8080 | http://192.168.76.2:31061 |
|-----------|----------------|-------------|---------------------------|
* 正通过默认浏览器打开服务 default/hello-minikube...
  http://192.168.76.2:31061
# 查看所有服务
[root@k8s0 ~]# kubectl get services
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
hello-minikube   NodePort    10.107.201.188   <none>        8080:31061/TCP   34d
kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP          34d
# 查看指定服务
[root@k8s0 ~]# kubectl get services hello-minikube
NAME             TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
hello-minikube   NodePort   10.107.201.188   <none>        8080:31061/TCP   34d
# 访问服务
[root@k8s0 ~]# curl http://192.168.76.2:31061
CLIENT VALUES:
client_address=172.17.0.1
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://192.168.76.2:8080/
SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001
HEADERS RECEIVED:
accept=*/*
host=192.168.76.2:31061
user-agent=curl/7.29.0
BODY:
-no body in request-

Reference



If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
8月前
|
运维 监控 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
国诚投顾携手阿里云,依托Serverless架构实现技术全面升级,构建高弹性、智能化技术底座,提升业务稳定性与运行效率。通过云原生API网关、微服务治理与智能监控,实现流量精细化管理与系统可观测性增强,打造安全、敏捷的智能投顾平台,助力行业数字化变革。
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
|
10月前
|
Kubernetes Cloud Native 安全
云原生机密计算新范式 PeerPods技术方案在阿里云上的落地和实践
PeerPods 技术价值已在阿里云实际场景中深度落地。
|
8月前
|
运维 监控 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
通过与阿里云深度合作,国诚投顾完成了从传统 ECS 架构向云原生 Serverless 架构的全面转型。新的技术架构不仅解决了原有系统在稳定性、弹性、运维效率等方面的痛点,还在成本控制、API 治理、可观测性、DevOps 自动化等方面实现了全方位升级。
|
10月前
|
Kubernetes Cloud Native 安全
云原生机密计算新范式 PeerPods 技术方案在阿里云上的落地和实践
PeerPods 技术价值已在阿里云实际场景中深度落地。
|
6月前
|
人工智能 Cloud Native 算法
拔俗云原生 AI 临床大数据平台:赋能医学科研的开发者实践
AI临床大数据科研平台依托阿里云、腾讯云,打通医疗数据孤岛,提供从数据治理到模型落地的全链路支持。通过联邦学习、弹性算力与安全合规技术,实现跨机构协作与高效训练,助力开发者提升科研效率,推动医学AI创新落地。(238字)
438 7
|
6月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
621 2
|
8月前
|
弹性计算 运维 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生Serverless实践
简介: 通过与阿里云深度合作,国诚投顾完成了从传统 ECS 架构向云原生 Serverless 架构的全面转型。新的技术架构不仅解决了原有系统在稳定性、弹性、运维效率等方面的痛点,还在成本控制、API 治理、可观测性、DevOps 自动化等方面实现了全方位升级。
209 1
|
7月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
387 8
|
9月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
916 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
9月前
|
运维 Kubernetes Cloud Native
分钟级到秒级:Yahaha 基于 OpenKruiseGame 的 UE5 游戏云原生实践
回顾《STRIDEN》项目在短短两个月内完成云原生转型的历程,它验证了一条清晰、可行的路径,即如何利用云原生技术,从根本上解决现代在线游戏所面临的运维复杂性难题。