Kubernetes的安装有两种方式:一是使用各个厂商封装的Kubernetes发行版,优点是可以一键安装部署,操作简单,缺点也很明显,若安装过程中某一步骤出现问题,很难定位处理;二是使用官方提供的kubeadm安装,优点是在安装过程中能熟悉各个组件的基本功能和命令,便于之后深入理解Kubernetes,缺点是安装步骤相对复杂。本文采用第二种,使用kubeadm安装目前最新版本v1.18.5,考虑到做为入门的学习调研,搭建了单Master的Kubernates集群,若要应用于生产环境,则需要安装多Master的高可用集群。

网上有很多关于Kubernetes的安装文档,这些文档大部分需要安装特别多的组件,而其中有些组件不是必须的,不利于初学者的学习和理解。Kubernetes官方的安装文档比较精简,但是安装步骤比较零散,且有些Docker容器需要科学*上网才能下载。本文档主要参考官网的安装步骤,力求只安装必要组件的同时,也补全官网安装步骤中介绍的比较粗略的部分,希望能给Kubernetes初学者提供一些参考,少走弯路。下面开始安装~~~

1. 环境准备 (master和work节点均需操作)

关闭swap分区

  • 临时关闭swap
swapoff -a
  • 永久关闭swap
vim /etc/fstab
注释掉自动挂载swap分区那行

禁用防火墙和selinux [1]

  • 禁用防火墙
systemctl stop firewalld && systemctl disable firewalld
  • 禁用selinux
#临时修改
setenforce 0 #永久修改,重启服务器后生效
sed -i 's/enforcing/disabled/' /etc/selinux/config

设置CRI 运行时的必要参数(docker运行会依赖这些参数)

  • 设置必需的sysctl参数,这些参数在重新启动后仍然存在
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF sysctl --system

安装Docker [2]

  • 安装必要的包
yum -y install yum-utils device-mapper-persistent-data lvm2
  • 添加阿里云yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 查看可用版本
yum list docker-ce --showduplicates | sort -r
  • 安装Docker CE
yum -y install docker-ce-19.03.4-3.el7  docker-ce-cli-19.03.4
  • 创建 /etc/docker 目录
mkdir /etc/docker
  • 设置deamon 并配置阿里云镜像加速
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"registry-mirrors": ["https://gqk8w9va.mirror.aliyuncs.com"]
}
EOF mkdir -p /etc/systemd/system/docker.service.d
  • 软链docker数据目录(考虑到/var挂载的磁盘存储空间一般比较小,存储docker镜像容易把磁盘打满)
mkdir /data0/docker
ln -s /data0/docker /var/lib/docker
  • 启动docker并设置开机自启动
systemctl daemon-reload
systemctl start docker
systemctl enable docker
  • 查看阿里云镜像加速和版本
docker info
docker version

安装kubeadm [3]

  • 配置kubernetes仓库,使用阿里云yum源(官网配置的仓库地址,需科学*上网才能下载)
cat >/etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
  • 安装v1.18.5版本的kubeadm、kubelet、kubectl
yum -y install kubelet-1.18.5-0 kubeadm-1.18.5-0 kubectl-1.18.5-0

kubeadm version
  • 设置kubelet开机自启动
systemctl enable kubelet

2. 使用kubeadm创建单master集群

初始化master节点

  • 配置kubeadm配置文件,针对不同版本的k8s注意修改相应版本号
cat <<EOF > ./kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.18.5
imageRepository: k8s.gcr.io #master地址
controlPlaneEndpoint: "10.13.1.2:6443"
networking:
serviceSubnet: "10.96.0.0/16" #k8s容器组所在的网段
podSubnet: "10.20.0.1/16"
dnsDomain: "cluster.local"
EOF
  • 下载k8s所需镜像,由于国内连不上https://k8s.gcr.io/v2/, 因此需要先在dockerhub下载相关镜像,在修改对应tag [4]
cat <<EOF > pull_k8s_images.sh
set -o errexit
set -o nounset
set -o pipefail
##这里定义版本
KUBE_VERSION=v1.18.5
KUBE_PAUSE_VERSION=3.2
ETCD_VERSION=3.4.3-0
DNS_VERSION=1.6.7 GCR_URL=k8s.gcr.io
##这里就是写你要使用的仓库
DOCKERHUB_URL=gotok8s
##这里是镜像列表
images=(
kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${DNS_VERSION}
)
##这里是拉取和改名的循环语句
for imageName in ${images[@]} ; do
docker pull $DOCKERHUB_URL/$imageName
docker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageName
docker rmi $DOCKERHUB_URL/$imageName
done
EOF chmod +x ./pull_k8s_images.sh sh pull_k8s_images.sh
  • 执行初始化操作
kubeadm init --config=kubeadm-config.yaml
  • 初始化完成后的控制台输出
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/ You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root: kubeadm join 10.13.1.2:6443 --token e9j0mj.l7vmkwisjk8kwuno \
--discovery-token-ca-cert-hash sha256:a594e62b65f41eb4e3e92238b9c6cd8451c411a57efecf6d192be8c649a96606 \
--control-plane Then you can join any number of worker nodes by running the following on each as root: kubeadm join 10.13.1.2:6443 --token e9j0mj.l7vmkwisjk8kwuno \
--discovery-token-ca-cert-hash sha256:a594e62b65f41eb4e3e92238b9c6cd8451c411a57efecf6d192be8c649a96606
  • 拷贝kubeconfig文件
mkdir -p /root/.kube
cp -i /etc/kubernetes/admin.conf /root/.kube/config
  • 安装网络插件calio
//下载文件
wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml //安装calico网络插件
kubectl apply -f calico.yaml

worker节点加入集群

kubeadm join 10.13.1.2:6443 --token e9j0mj.l7vmkwisjk8kwuno \
--discovery-token-ca-cert-hash sha256:a594e62b65f41eb4e3e92238b9c6cd8451c411a57efecf6d192be8c649a96606

验证集群状态(master节点)

//安装完成后稍等一会查看pods状态
kubectl get pods -n kube-system //查看node状态
kubectl get nodes
#output
NAME STATUS ROLES AGE VERSION
10.13.1.3 Ready <none> 3m12s v1.18.5
10.13.1.2 Ready master 27m v1.18.5 若发现master和worker节点状态均为Ready,说明安装完成啦!

故障排查

  • 若观察到某一个pod状态不正常,可通过查看该pod的详细信息进行问题定位
kubectl describe pod <pod-name>

删除集群

// 删除deployment
kubectl get deployment -o wide
kubectl delete deployment deployment_name // 删除pod
kubectl get pods
kubectl delete pods --all // 删除节点
kubectl drain <node_name>
kubectl delete node <node_name> // 重置集群
kubeadm reset

3. 参考资料

1. https://kubesphere.com.cn/forum/d/1272-kubeadm-k8s-kubesphere-2-1-1  手把手教程:Kubeadm 安装 k8s 后安装 kubesphere 2.1.1
2. https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/ 官网文档——容器运行时
3. https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#k8s-install-1 官网文档——安装 kubeadm
4. https://blog.csdn.net/weixin_43168190/article/details/107227626 k8s拉取镜像失败最简单最快最完美解决方法 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver
5. https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/ Creating a single control-plane cluster with kubeadm

Kubernetes入门(一)——Kubernetes v1.18.5 安装部署的更多相关文章

  1. Ubuntu 18.04 安装部署Net Core、Nginx全过程

    Ubuntu 18.04 安装部署Net Core.Nginx全过程 环境配置 Ubuntu 18.04 ,Nginx,.Net Core 2.1, Let's Encrypt 更新系统 sudo a ...

  2. Hadoop入门进阶课程13--Chukwa介绍与安装部署

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  3. Apache入门篇(一)之安装部署apache

    一.HTTPD特性 (1)高度模块化:core(核心) + modules(模块) = apache(2)动态模块加载DSO机制: Dynamic Shared Object(动态共享对象)(3)MP ...

  4. Kubernetes入门学习--在Ubuntu16.0.4安装配置Minikube

    目 录 一. 安装minikube环境 1.1. 安装前准备 1.2. 安装Lantern 1.2.1. Lantern下载网站 1.2.2. Lantern下载地址 1.2.3. Lantern安装 ...

  5. Kubernetes 入门之Kubernetes 的基本概念和术语

    Kubernetes是什么?    他是一个全新的基于容器技术分布式架构领先方案:    他也是一个开放的开发平台:    他也是一个完备的分布式系统支撑平台:   Kubernetes的基本慨念和术 ...

  6. Kubernets二进制安装(18)之安装部署Heapster

    1.下载heapster镜像 在运维主机(mfyxw50.mfyxw.com)执行 [root@mfyxw50 ~]# docker pull quay.io/bitnami/heapster:1.5 ...

  7. Prometheus入门到放弃(2)之Node_export安装部署

    1.下载安装 node_exporter服务需要在三台机器都安装,这里我们以一台机器为例: 地址:https://prometheus.io/download/ ### 另外两个节点部署时,需要先创建 ...

  8. Prometheus入门到放弃(1)之Prometheus安装部署

    规划: IP 角色 版本 10.10.0.13 prometheus-server 2.10 10.10.0.11 node_exporter 0.18.1 10.10.0.12 node_expor ...

  9. Hadoop入门进阶课程8--Hive介绍和安装部署

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

随机推荐

  1. pandas_查看数据特征和统计信息

    # 查看数据特征和统计信息 import pandas as pd # 读取文件 dataframe = pd.read_excel(r'C:\Users\lenovo\Desktop\总结\Pyth ...

  2. HTML 基础- 4个实例

    HTML 基础- 4个实例 不要担心本章中您还没有学过的例子,高佣联盟 www.cgewang.com 您将在下面的章节中学到它们. HTML 标题 HTML 标题(Heading)是通过<h1 ...

  3. Skill 解决 Design Library 被识别成 Technology Library 的问题

    https://www.cnblogs.com/yeungchie/ code procedure(ycTechLibToDesign(libName attachLibName) prog((lib ...

  4. [草稿]Skill 中的map

    https://www.cnblogs.com/yeungchie/ Skill 中的map map mapc mapcan mapcar mapcon mapinto maplist

  5. Python Cookbook(第3版) 中文版 pdf完整版|网盘下载内附提取码

    Python Cookbook(第3版)中文版介绍了Python应用在各个领域中的一些使用技巧和方法,其主题涵盖了数据结构和算法,字符串和文本,数字.日期和时间,迭代器和生成器,文件和I/O,数据编码 ...

  6. x86架构:分页机制和原理

    分页是现在CPU核心的管理内存方式,网上介绍材料很多,这里不赘述,简单介绍一下分页的背景和原理 1.先说说为什么要分段 实模式下程序之间不隔离,互相能直接读写对方内存,或跳转到其他进程的代码运行,导致 ...

  7. linux的软件管理的rpm包和yum配置加tar解压包和安装编译./configuer

    软件管理 rpm包  和yum 1.软件形式 Linux系统的第三方软件,无论是应用软件还是工具软件,大多以以下两种形式之一发行: 源代码形式       预编译形式 获取的源代码形式的软件,需要对其 ...

  8. 面试题:JVM 堆内存溢出后,其他线程是否可继续工作?

    来源:http://sina.lt/gqaM 最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”.我看网上出现了很多不靠谱的答案.这道题其实很有难度,涉及的知识点有jvm内存分配. ...

  9. kafka的学习1

    1.Kafka是什么? Apache Kafka 是一款开源的分布式消息引擎系统.倘若“消息引擎系统”这个词对你来说有点陌生的话,那么“消息队列”“消息中间件”的提法想必你一定是有所耳闻的.不过说实话 ...

  10. 使用Azure人脸API对图片进行人脸识别

    人脸识别是人工智能机器学习比较成熟的一个领域.人脸识别已经应用到了很多生产场景.比如生物认证,人脸考勤,人流监控等场景.对于很多中小功能由于技术门槛问题很难自己实现人脸识别的算法.Azure人脸API ...