1. 使用Kubeadm部署k8s

简介: 使用Kubeadm部署k8s本文参考官网教程,安装过程一波三折,几次想放弃,但又不甘心,一边翻着源码一边看着教程,最终才有了下面的内容。环境要求1. Ubuntu 16.04 2核4G注意这里最好是2核,部署安装时发现单核导致ingress-nginx部分pod无启动安装开始之前请确保使用的root账户,非root账户请自行添加sudo2.

使用Kubeadm部署k8s

本文参考官网教程,安装过程一波三折,几次想放弃,但又不甘心,一边翻着源码一边看着教程,最终才有了下面的内容。

环境要求

1. Ubuntu 16.04 2核4G

注意这里最好是2核,部署安装时发现单核导致ingress-nginx部分pod无启动

安装开始之前请确保使用的root账户,非root账户请自行添加sudo

2. 安装docker

我这里使用的是18.03.1

3. 安装Kubeadm, kubelet,kubectl

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl

4. 永久禁用交换分区

打开/etc/fstab文件并找到包含swap文本行在开头注释,类似如下:

/dev/mapper/ubuntu--vg-root /               ext4    errors=remount-ro 0       1
UUID=d11aa7b5-457b-4bc1-80fd-c5e33f63ac04 /boot           ext2    defaults        0       2
## 注释一下两行
#/dev/mapper/ubuntu--vg-swap_1 none            swap    sw              0       0
#/dev/mapper/cryptswap1 none swap sw 0 0

5. 禁用防火墙

禁用防火墙并不是安全的做法,如果在真实的环境中请查看k8s文档开放指定的端口。
我这里简单粗暴直接禁用防火墙:
ufw disable

6. 配置cgroup驱动类型

docker中有两种cgroup驱动类型:cgroupfs,systemd

1. 查看docker使用的驱动类型:`docker info|grep -i cgroup`
2. 修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 配置文件中的cgroup类型与上一步执行结果对应
    //假如该文件中有如下这一行
    Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
    //如果没有上面这行,需要添加,并修改cgroup-driver为docker使用的类型,我的安装环境正确的配置如下:
    Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
3. 使上一步配置生效
    systemctl daemon-reload
    systemctl restart kubelet

部署k8s

执行kubeadm init命令之前需要提前准备一些docker镜像,因为这些镜像位于google服务器上,我们没有用办法正常获取,所以这里我们从自己的镜像服务器下载。

我这里写了一个简单的脚本文件,便于你获取所需的docker镜像。

下载镜像shell脚本

# --kubernetes-version=v1.10.2 指定我们要安装的k8s版本
# --feature-gates=CoreDNS=true 使用CoreDNS来做主机名到IP的对应关系
# --pod-network-cidr=192.168.0.0/16 这里使用的网络类型为Calico
kubeadm init --kubernetes-version=v1.10.2 --feature-gates=CoreDNS=true --pod-network-cidr=192.168.0.0/16

如果部署成功你会看到如下显示:

......
Your Kubernetes master 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 machines by running the following on each node
as root:

  kubeadm join 194.168.1.15:6443 --token ninsl0.hgnutou2p9f9u8d4 --discovery-token-ca-cert-hash sha256:ba73076c46a143260ba876d09174f558deb1941794621591cbc104d63c50adaa

接下来执行以下命令,使kubectl命令生效:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

此时执行kubectl get nodes可以看到返回结果中master处于NotReady状态

NAME        STATUS     ROLES     AGE       VERSION
k8s-node   NotReady   master    26m       v1.10.2

部署Calico网络插件

kubectl apply -f https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml

稍等片刻后查看master节点的状态:kubectl get nodes

NAME        STATUS    ROLES     AGE       VERSION
k8s-node2   Ready     master    40m       v1.10.2
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
2月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
135 60
|
2月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
268 62
|
23天前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
29天前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
48 0
|
2月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
91 3
|
2月前
|
Kubernetes Linux 开发工具
centos7通过kubeadm安装k8s 1.27.1版本
centos7通过kubeadm安装k8s 1.27.1版本
|
2月前
|
NoSQL 关系型数据库 Redis
高可用和性能:基于ACK部署Dify的最佳实践
本文介绍了基于阿里云容器服务ACK,部署高可用、可伸缩且具备高SLA的生产可用的Dify服务的详细解决方案。
|
2月前
|
Kubernetes 网络协议 安全
[kubernetes]二进制方式部署单机k8s-v1.30.5
[kubernetes]二进制方式部署单机k8s-v1.30.5
|
Kubernetes 开发者 微服务
简化Kubernetes应用部署工具-Helm之Hook
本文讲的是简化Kubernetes应用部署工具-Helm之Hook【编者的话】微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。
2563 0
下一篇
DataWorks