centos7.8 安装部署 k8s 集群

刚接触 k8s,配置环境折腾了一天,感觉有很多坑,网上很多教程已经不靠谱了,自己记录下安装部署 k8s 的全过程。

环境说明

software version
OS CentOS Linux release 7.8.2003 (Core)
Docker 18.09.6
kubelet v1.14.2
kubeadm v1.14.2
kubectl v1.14.2
flannel v0.9.1

Docker 安装

  1. 安装依赖
yum install -y yum-utils   device-mapper-persistent-data   lvm2
  1. 设置 Docker 源
yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装 Docker CE

docker 安装版本查看

yum list docker-ce --showduplicates | sort -r

安装 Docker,指定版本

yum install docker-ce-18.09.6 docker-ce-cli-18.09.6 containerd.io
  1. 启动 Docker
systemctl start docker	# 启动 docker服务

systemctl enable docker # 设置开机启动 docker
  1. 命令补全

安装 bash-completion

yum -y install bash-completion

source /etc/profile.d/bash_completion.sh
  1. 镜像加速

可以在 https://cr.console.aliyun.com 中获取自己的加速域名

配置 daemon.json 文件

mkdir -p /etc/docker

cd /etc/docker && vim daemon.json

# 修改文件
{
"registry-mirrors": [
"https://xxxxxx.mirror.aliyuncs.com"
]
}
  1. 重启服务
systemctl daemon-reload

system restart docker
  1. 验证
docker --version

docker run hello-world

k8s 安装准备工作

注意 centos 禁用防火墙和 selinux,并且设置 阿里源

  1. 修改主机名
hostnamectl set-hostname master

cat /etc/hostname	# 查看
  1. 修改 hosts (多节点配置)
cat >> /etc/hosts << EOF
xxx.xxx.xxx.xxx master
xxx.xxx.xxx.xxx node01
xxx.xxx.xxx.xxx node02
EOF
  1. 禁用 swap
# 临时禁用
swapoff -a # 永久禁用
sed -i.bak '/swap/s/^/#/' /etc/fstab
  1. 内核参数修改(重要,不然出现 bug 找半天原因…… )
# 临时修改
sysctl net.bridge.bridge-nf-call-iptables=1
sysctl net.bridge.bridge-nf-call-ip6tables=1 # 永久修改
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF sysctl -p /etc/sysctl.d/k8s.conf
  1. 修改 Cgroup Driver

修改 /etc/docker/daemon.json

{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}

重新加载 docker

systemctl daemon-reload

systemctl restart docker
  1. 设置 kubernetes 源

新增 k8s 源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

更新缓存

yum clean all

yum -y makecache

Master 节点安装 k8s

版本查看

yum list kubelet --showduplicates | sort -r

安装 kubelet,kubeadm,kubectl

  1. 指定版本安装
yum install -y kubelet-1.14.2

yum install -y kubeadm-1.14.2

yum install -y kubectl-1.14.2
  • kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
  • kubeadm 用于初始化集群,启动集群的命令工具
  • kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
  1. 启动 kubelet 并设置开机启动
systemctl enable kubelet && systemctl start kubelet
  1. Kubelet 命令补全

https://kubernetes.io/zh/docs/tasks/tools/install-kubectl/

(我使用的 zsh,bash 和 zsh 有所不同)

Bash:

echo "source <(kubectl completion bash)" >> ~/.bash_profile
source .bash_profile

Zsh:

if [ $commands[kubectl] ]; then
source <(kubectl completion zsh)
fi

如果是 On-My-Zsh,需要在 plugin 中加入

plugins=(kubectl)

下载镜像

Kubernetes几乎所有的安装组件和Docker镜像都放在goolge自己的网站上,直接访问可能会有网络问题,这里的解决办法是从阿里云镜像仓库下载镜像,拉取到本地以后改回默认的镜像tag。

  1. 新建 image.sh 脚本。
#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers
version=v1.14.2
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; do
docker pull $url/$imagename
docker tag $url/$imagename k8s.gcr.io/$imagename
docker rmi -f $url/$imagename
done
  1. 下载镜像
chmod u+x image.sh

./image.sh

docker images

初始化 Master

  1. 初始化
kubeadm init
  1. 加载环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source .bash_profile

如果不是在 root 用户下执行,需要执行以下操作:

mkdir -p $HOME/.kube

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

chown $(id -u):$(id -g) $HOME/.kube/config
  1. 安装 pod 网络

拉取镜像

docker pull quay.io/coreos/flannel:v0.9.1-amd64
mkdir -p /etc/cni/net.d/

cat <<EOF> /etc/cni/net.d/10-flannel.conf
{"name":"cbr0","type":"flannel","delegate": {"isDefaultGateway": true}}
EOF

设置环境变量

mkdir /usr/share/oci-umount/oci-umount.d -p
mkdir /run/flannel/
cat <<EOF> /run/flannel/subnet.env
FLANNEL_NETWORK=172.100.0.0/16
FLANNEL_SUBNET=172.100.1.0/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
EOF

开启网络

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
  1. master 节点配置

默认情况下集群不会在master上调度pod,如果偏想在master上调度Pod,可以执行如下操作:

查看 taint

 kubectl describe node master|grep -i taints

删除默认污点

kubectl taint nodes master node-role.kubernetes.io/master-

这个涉及 k8s 的 taint 污点和 toleration 容忍机制,可以自己查阅文档。

Master Pod 配置例子

  1. 查看 master 节点的 taint 配置
$ kubectl describe node master

查看到 taint 配置为

...
Taints: node.kubernetes.io/not-ready:NoExecute
node.kubernetes.io/not-ready:NoSchedule
key=value:PreferNoSchedule
...
  1. 在 Pod 中配置能够分配 toleration,使其能够分配使用

添加配置:

spec:
tolerations:
- key: node.kubernetes.io/not-ready
operator: Exists
effect: NoSchedule
  1. 运行 Pod
$ kubectl create -f mysql.yaml

$ kubectl describe pod mysql
...
Normal Scheduled 4m35s default-scheduler Successfully assigned default/mysql-rm2dv to master ...

启动测试

启动 nginx 实例并且访问

  1. 命令方式
kubectl run httpd-app --image=httpd --replicas=3
  1. 配置文件方式
$ cat >> nginx.yml << EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
restartPolicy: Always
containers:
- name: nginx
image: nginx:latest
EOF $ kubectl apply -f nginx.yml
  1. 状态查看
kubectl get nodes

kubectl get svc		# 查看服务所开放的端口
  1. 查看 pod 状态
kubectl get pod --all-namespaces
  1. 查看副本数目
kubectl get deployments

kubectl get pod -o wide
  1. 查看集群基本组件状态
kubectl get cs
  1. 访问

在其他机器上访问即可,通过 nodePort 暴露端口。


漫长的过程,还有很多报错和问题随后再开个帖子记录。

参考文章

centos7.8 安装部署 k8s 集群的更多相关文章

  1. kubernetes系列03—kubeadm安装部署K8S集群

    本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...

  2. centos7下安装部署mongodb集群(副本集模式)

    环境需求:Mongodb集群有三种模式:  Replica Set, Sharding,Master-Slaver.  这里部署的是Replica Set模式. 测试环境: 这里副本集(Replica ...

  3. 使用kubeadm部署k8s集群[v1.18.0]

    使用kubeadm部署k8s集群 环境 IP地址 主机名 节点 10.0.0.63 k8s-master1 master1 10.0.0.63 k8s-master2 master2 10.0.0.6 ...

  4. 二进制方法-部署k8s集群部署1.18版本

    二进制方法-部署k8s集群部署1.18版本 1. 前置知识点 1.1 生产环境可部署kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式 kuberadm Kubea ...

  5. Kubernetes后台数据库etcd:安装部署etcd集群,数据备份与恢复

    目录 一.系统环境 二.前言 三.etcd数据库 3.1 概述 四.安装部署etcd单节点 4.1 环境介绍 4.2 配置节点的基本环境 4.3 安装部署etcd单节点 4.4 使用客户端访问etcd ...

  6. 【02】Kubernets:使用 kubeadm 部署 K8S 集群

    写在前面的话 通过上一节,知道了 K8S 有 Master / Node 组成,但是具体怎么个组成法,就是这一节具体谈的内容.概念性的东西我们会尽量以实验的形式将其复现. 部署 K8S 集群 互联网常 ...

  7. 部署K8S集群

    1.Kubernetes 1.1.概念 kubernetes(通常称为k8s)用于自动部署.扩展和管理容器化应用程序的开源系统.它旨在提供“跨主机集群的自动部署.扩展以及运行应用程序容器的平台”.支持 ...

  8. 菜鸟系列k8s——快速部署k8s集群

    快速部署k8s集群 1. 安装Rancher Rancher是业界唯一完全开源的企业级容器管理平台,为企业用户提供在生产环境中落地使用容器所需的一切功能与组件. Rancher2.0基于Kuberne ...

  9. Ansible自动化部署K8S集群

    Ansible自动化部署K8S集群 1.1 Ansible介绍 Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新.Ansible适用于管理企 ...

随机推荐

  1. 数据库事务的四个特性ACID

    原子性[Atomicity] 原子性指的指的就是这个操作,要么全部成功,要么全部失败回滚.不存在其他的情况. 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一 ...

  2. Centos 7下编译安装Mysql

    (1)官网下载地址:https://dev.mysql.com/downloads/mysql/ 此处下载的是 mysql-boost-5.7..tar.gz 百度云下载地址:https://pan. ...

  3. (一)python 格式化 excel 格式

    需求: 客户通过 sftp 上传了一个 poc测试的 excel文件, 下到 云桌面 查看,发现一堆格式问题, 怎么办呢? 公司又不允许 吧文件下载到本地处理, 只能在 服务器上进行处理. 一堆的类型 ...

  4. 如果你大学上过编程课,一定被老师提醒过:不要使用 goto 语句!

    如果你上过编程课,一定被老师提醒过:不要使用goto语句! 因为goto语句不仅让代码的可读性很差,随意的跳出还会给程序带来安全隐患. 但是这种几乎被现代编程明令禁止的语句,在计算机诞生之初却司空见惯 ...

  5. github 错误

    Push failed: Unable to access 'https://github.com/infoo/Neo4j.git/': The requested URL returned erro ...

  6. Linux发行版-Manjaro

    Manjaro是什么? 一个基于Arch系列,开源的linux发行版 Mnajrao官网了解更多,这里不做更多阐述内容 为什么使用Manjaro 第一点,为了方便自己隔离腾讯网游 第二点,更方便的学习 ...

  7. Java中增强一个类的几种方法

    今天有人问我怎么增强一个类的功能.博客刚好没东西,今天就讲讲增强类. 增强的手段有三种类型: 1.继承或者实现接口:特点是被增强对象不能变,增强的内容不能变. 2.装饰着模式:特点是被增强对象可变,但 ...

  8. 微信小程序多列选择器

    wxml <picker mode="multiSelector" bindchange="bindMultiPickerChange2" bindcol ...

  9. JavaScript 数组中根据某个属性值的中文进行排序

    普通排序 const arr = [] arr.sort((x, y) => x.prop - y.prop) 中文属性值排序 const arr = [] arr.sort((x, y) =& ...

  10. 在虚拟机中安装Mysql

    目录 下载Mysql 安装 配置mysql允许远程访问 下载Mysql 下载地址:http://dev.mysql.com/downloads/mysql 我这里下载的是安装版本 安装 配置mysql ...