【小白运维系列二】K8S+docker安装部署

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 最近公司要将虚机环境转移到容器环境,以更好的支持后续服务动态升降级的战略规划,借着这个机会小编参与了这次工作

一、背景介绍


最近公司要将虚机环境转移到容器环境,以更好的支持后续服务动态升降级的战略规划,借着这个机会小编参与了这次工作


阅读这篇文章您会了解到小编从0-1安装K8S+docker的过程、思路、总结以及产生的问题,希望能够和读者碰撞出更多的"车祸"


二、思路


1.查阅K8S+docker的版本号对应关系

2.将所需的安装包下载到本地(进行本地化安装)

3.机器的准备(其中包括机器版本及配置)

4.环境的准备

5.K8S的安装及加载K8S镜像

6.安装kubeadm并创建K8S集群


三、过程


1.查阅K8S+docker的版本号对应关系


1.1.打开github;搜索kubernetes项目(github地址:https://github.com/)

1.2.打开项目中CHANGELOG文件夹,其中就有CHANGELOG-XXX.md版本号文件,如下截图所示:

20210618214906218.png


1.3.打开kubernetes版本号文件,ctrl+f搜索"docker version",便可以查询到所有可用版本号如下截图所示:


20210618214942782.png


2.将所需的安装包下载到本地(进行本地化安装)


3.机器的准备(其中包括机器版本及配置)


3.1.查看linux机器版本号命令:cat /proc/version

我的版本号:Linux version 3.10.0-1062.18.1.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 17 23:49:17 UTC 2020

3.2.机器的配置

cpu:4C 内存:4G 硬盘:32G

查看cpu(逻辑):cat /proc/cpuinfo | grep ‘processor’ | wc -l

查看cpu(物理):cat /proc/cpuinfo | grep ‘physical id’ | sort | uniq | wc -l

查看内存总数:cat /proc/meminfo | grep MemTotal

查看硬盘大小:df -h


4.环境的准备


4.1. 设置主机名与时区

timedatectl set-timezone Asia/Shanghai #都要执行

hostnamectl set-hostname master #194执行

hostnamectl set-hostname node1 #195执行

hostnamectl set-hostname node2 #196执行


4.2. 添加hosts网络主机配置,三台虚拟机都要设置

vim /etc/hosts

192.168.10.194 master

192.168.10.195 node1

192.168.10.196 node2


4.3. 关闭防火墙,三台虚拟机都要设置,生产环境跳过这一步

sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config

setenforce 0

systemctl disable firewalld

systemctl stop firewalld


5.K8S的安装及加载K8S镜像


5.1. 将镜像包上传至服务器每个节点

mkdir /usr/local/k8s-install

cd /usr/local/k8s-install

XFTP上传安装文件


5.2. 按每个Centos上安装Docker

tar -zxvf docker-ce-18.09.tar.gz

cd docker

yum localinstall -y *.rpm


systemctl start docker

systemctl enable docker


5.3. 确保从cgroups均在同一个从groupfs

#cgroups是control groups的简称,它为Linux内核提供了一种任务聚集和划分的机制,通过一组参数集合将一些任务组织成一个或多个子系统。

#cgroups是实现IaaS虚拟化(kvm、lxc等),PaaS容器沙箱(Docker等)的资源管理控制部分的底层基础。

#子系统是根据cgroup对任务的划分功能将任务按照一种指定的属性划分成的一个组,主要用来实现资源的控制。

#在cgroup中,划分成的任务组以层次结构的形式组织,多个子系统形成一个数据结构中类似多根树的结构。cgroup包含了多个孤立的子系统,每一个子系统代表单一的资源


docker info | grep cgroup


如果不是groupfs,执行下列语句


cat << EOF > /etc/docker/daemon.json
{
“exec-opts”: [“native.cgroupdriver=cgroupfs”]
}
EOF
systemctl daemon-reload && systemctl restart docker


5.4. 安装kubeadm

kubeadm是集群部署工具


cd /usr/local/k8s-install/kubernetes-1.14
tar -zxvf kube114-rpm.tar.gz
cd kube114-rpm
yum localinstall -y *.rpm


5.5. 关闭交换区


swapoff -a
vi /etc/fstab
#swap一行注释


5.6. 配置网桥


cat < /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system


5.7. 通过镜像安装k8s


cd /usr/local/k8s-install/kubernetes-1.14
docker load -i k8s-114-images.tar.gz
docker load -i flannel-dashboard.tar.gz


6.安装kubeadm并创建K8S集群


6.1. master主服务器配置


kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown ( i d − u ) : (id -u):(id−u):(id -g) $HOME/.kube/config
kubectl get nodes
#查看存在问题的pod
kubectl get pod --all-namespaces
#设置全局变量
#安装flannel网络组件
kubectl create -f kube-flannel.yml


6.2. 加入NODE节点


kubeadm join 192.168.10.194:6443 --token 0b15nw.w9xq58pcttqq647k
–discovery-token-ca-cert-hash sha256:23db3094dc9ae1335b25692717c40e24b1041975f6a43da9f43568f8d0dbac72


如果忘记

在master 上执行kubeadm token list 查看 ,在node上运行(如下ip、端口、token都是master对应的值,切记)


kubeadm join 192.168.10.194:6443 --token 0b15nw.w9xq58pcttqq647k --discovery-token-unsafe-skip-ca-verification
kubectl get nodes


6.3. Master开启仪表盘


kubectl apply -f kubernetes-dashboard.yaml
kubectl apply -f admin-role.yaml
kubectl apply -f kubernetes-dashboard-admin.rbac.yaml
kubectl -n kube-system get svc
http://192.168.10.194:32000 访问


7.遇到的坑


7.1.最开始在自己本地的虚拟机进行安装的由于分配的cpu为1,结果执行6.1步骤的时候报错了,错误提示很明确最少需要2cpu

7.2.后来在以上机器配置中进行5.2中安装docker遇到如下版本号冲突问题,于是百度下载对应版本号的包替换即可(让版本号一致)


错误:软件包:policycoreutils-python-2.5-29.el7_6.1.x86_64 (/policycoreutils-python-2.5-29.el7_6.1.x86_64)

需要:policycoreutils = 2.5-29.el7_6.1

已安装: policycoreutils-2.5-33.el7.x86_64 (@anaconda)

policycoreutils = 2.5-33.el7

可用: policycoreutils-2.5-34.el7.x86_64 (base)

policycoreutils = 2.5-34.el7

错误:软件包:audit-libs-python-2.8.4-4.el7.x86_64 (/audit-libs-python-2.8.4-4.el7.x86_64)

需要:audit-libs(x86-64) = 2.8.4-4.el7

已安装: audit-libs-2.8.5-4.el7.x86_64 (@anaconda)

audit-libs(x86-64) = 2.8.5-4.el7


7.3.执行6.3加入node节点的时候,在node机器输入的命令一直是node机器的ip结果总是报错;后来才恍然大悟,需要用master机器的ip


7.4.执行6.3加入node节点的时候,token过期,导致无法加入

如果遇到如下问题,可能是token过期了,需要执行 kubeadm token create重新获取token


[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster…
[preflight] FYI: You can look at this config file with ‘kubectl -n kube-system get cm kubeadm-config -oyaml’
error execution phase preflight: unable to fetch the kubeadm-config ConfigMap: failed to get config map: Unauthorized


四、学习总结


收获:

1.一点点执行完,遇到问题,解决问题,搞懂为什么会出该问题,真的是一个非常享受的过程

2.安装完之后,原来发现高大上的东西竟然如此简单


提出的问题:

1.k8s和rancher的区别?

2.k8s和docker的关系?


五、升华


当遇到问题的时候,再多问几个为什么,如果实在卡住了,不妨抛弃所有的验证,回归到第一眼看到这个问题开始重新思考。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
监控 文件存储 Docker
实现NAS远程下载,Docker部署qBittorrent、Transmission、贝锐花生壳
与电脑不同,NAS通常7x24小时运行,便于下载资源,解决BT/PT下载需长时间在线的问题。因此,qBittorrent、Transmission等下载管理工具成为NAS用户的必备应用。通过Docker,用户可在多种NAS设备上快速安装这些工具,并通过局域网IP地址+端口访问。然而,缺乏公网IPv4地址导致远程访问困难,贝锐花生壳提供了解决方案,允许无公网IP情况下通过固定域名远程访问NAS中的下载工具,简化了部署过程,使用户能随时随地控制家中的下载任务。
53 33
实现NAS远程下载,Docker部署qBittorrent、Transmission、贝锐花生壳
|
8天前
|
人工智能 API 数据库
FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
【9月更文挑战第5天】 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
|
18天前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
119 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
5天前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
33 11
|
18天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
18天前
|
虚拟化 Docker Windows
window 10专业版部署docker环境
本文介绍了如何在Windows 10专业版上部署Docker环境,包括安装步骤、配置镜像加速以及可能遇到的错误处理。
41 2
window 10专业版部署docker环境
|
18天前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
40 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
3天前
|
Kubernetes Cloud Native Linux
云原生入门:Kubernetes的简易部署与应用
【8月更文挑战第49天】在云原生的世界里,Kubernetes(K8s)是一颗璀璨的星。本文将带你走进K8s的世界,从安装到简单应用,轻松驾驭这个强大的容器编排工具。让我们一起探索云原生的奥秘,解锁新技能!
|
6天前
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。
|
8天前
|
Kubernetes Docker 微服务
构建高效的微服务架构:基于Docker和Kubernetes的最佳实践
在现代软件开发中,微服务架构因其灵活性和可扩展性而受到广泛青睐。本文探讨了如何利用Docker和Kubernetes来构建高效的微服务架构。我们将深入分析Docker容器的优势、Kubernetes的编排能力,以及它们如何结合实现高可用性、自动扩展和持续部署。通过具体的最佳实践和实际案例,读者将能够理解如何优化微服务的管理和部署过程,从而提高开发效率和系统稳定性。