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. Python 数字类型转换

    Python数字类型转换: int(x):将 x 转换为一个整数 float(x):将 x 转换为一个浮点数 complex(x,y):将 x 和 y 转换为一个复数.x 为复数的实部,y 为复数的虚 ...

  2. 线程_gevent自动切换CPU协程

    import gevent def f(n): for i in range(n): print (gevent.getcurrent(), i) # gevent.getcurrent() 获取当前 ...

  3. FGPA_Microblaze UART 中断

    由于底层所给函数发送与接收都采用中断,所用库函数比较复杂 ,有些更改涉及底层函数,因此结合网上论坛 .百度文库调试了串口中断接收程序.通过串口调试助手发送数据 ,以“发送新行”结束 . 硬件外设波特兰 ...

  4. luogu P6087 [JSOI2015]送礼物 二分 单调队列 决策单调性

    LINK:送礼物 原本想了一个 \(nlog^2\)的做法 然后由于线段树常数过大 T到30. 以为这道题卡\(log^2\)没想到真的有神仙写\(log^2\)的过了 是我常数大了 抱歉. 能过的\ ...

  5. Git本地仓库基本操作

    目录 设置姓名和邮箱 创建仓库 提交本地代码 .gitignore git add git commit git status git diff 查看提交记录 撤销未提交的修改 版本回退 设置姓名和邮 ...

  6. TF签名 外部测试 内部测试 TestFlight

    1.将release包传到iTunes connect 2. 绿线是内部测试 A.需要添加测试员 B.最多25个测试员 C.提交到iTunes connect不需要等待审核,即可测试 红线是外部测试( ...

  7. 一道 3 行代码的 Python面试题,我懵逼了一天

    有意思的题目 题目:写出下面程序运行结果 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的 ...

  8. 1)uboot的编译和烧写

    购买荔枝派ZERO已经将近一个星期了,由于官方资料不够完整一直没有任何进展.经过今夜近三个小时的折腾终于将UBOOT烧写成功,现将过程记录如下: 1)获取官方uboot 源码 : git clone  ...

  9. Quartz.Net的基础使用方法,单任务执行

    1.先创建一个控制台应用程序  2.应用Quartz的NuGet包  3.编写执行任务代码 using System; using System.Threading.Tasks; using Quar ...

  10. C#LeetCode刷题-链表

    链表篇 # 题名 刷题 通过率 难度 2 两数相加   29.0% 中等 19 删除链表的倒数第N个节点   29.4% 中等 21 合并两个有序链表 C#LeetCode刷题之#21-合并两个有序链 ...