kubernetes 部署(Centos 7)

一个或者多个兼容 deb 或者 rpm 软件包的操作系统,比如 Ubuntu 或者 CentOS

每台机器 2 GB 以上的内存,内存不足时应用会受限制

主节点上 2 CPU 以上

集群里所有的机器有完全的网络连接,公有网络或者私有网络都可以

  • 关闭防火墙
sudo systemctl stop firewalld.service       #停止firewall
sudo systemctl disable firewalld.service #禁止firewall开机启动
sudo firewall-cmd --state #查看防火墙状态
  • 开启数据包转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

生效命令sysctl -p

  • 配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
  • swap关闭
swapoff -a

修改 /etc/fstab 文件,注释掉 SWAP 的自动挂载,使用free -m确认swap已经关闭。

  • 主机名配置

修改主机名hostnamectl set-hostname <主机名> --static

每台主机/etc/hosts指明

1、docker ce安装

https://docs.docker.com/install/linux/docker-ce/centos/

https://kubernetes.io/docs/setup/cri/

# Install Docker CE
## Set up the repository
### Install required packages.
yum install yum-utils device-mapper-persistent-data lvm2 ### Add Docker repository.
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo ## Install Docker CE.
yum install -y --setopt=obsoletes=0 docker-ce-18.09.5-3.el7 ## Create /etc/docker directory.
mkdir /etc/docker # Setup daemon.
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"
]
}
EOF systemctl enable docker
systemctl restart docker

查看可以安装包

yum list docker-ce --showduplicates

2、kubelet kubeadm kubectl安装(v1.14.1)

https://kubernetes.io/zh/docs/setup/independent/install-kubeadm/

  • 仓库镜像源选择阿里
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
exclude=kube*
EOF
  • 将 SELinux 设置为 permissive 模式(将其禁用)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  • yum安装
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

或者指定版本

yum install -y kubelet-1.14.1 kubeadm-1.14.1 kubectl-1.14.1 --disableexcludes=kubernetes
  • 启动kubelet
systemctl enable kubelet && systemctl start kubelet

从运行结果可以看到kubelet处于定期重启的状态,只有当在master节点执行kubeadm init 或者在worker节点执行kubeadm join时候。kubelet所需要的配置才能被满足。这个时候kubelet才会正常运行起来。

3、k8s主要组件安装

kubeadm config images list --kubernetes-version=v1.14.1

镜像源路径 gcr.io/google_containers

由于国内的网络原因,在搭建环境时,经常无法pull到这些镜像。可以利用Docker Hub搭建自己的镜像仓库。

1、通过GitHub创建一个仓库kubernetes

  • 在centos主机上执行
cd kubernetes
git init
git remote add origin git@github.com:shhnwangjian/kubernetes.git
mkdir kube-apiserver
cd kube-apiserver
  • vim Dockerfile
FROM gcr.io/google_containers/kube-apiserver:v1.14.1
MAINTAINER shhnwangjian

其它目录和Dockerfile也需要创建

git add .
git commit -m "kubernetes Dockerfile v1.14.1"
git push origin master

2、访问 https://hub.docker.com/

填写的内容是kube-apiserver-amd64

点击创建后,进入这个Repositories

输入对应信息点击 SAVE

点击Trigger进行构建,构建成功后,

通过执行 docker login 命令交互式的输入用户名及密码来完成在命令行界面登录 Docker Hub

通过命令docker pull shhnwangjian/kube-apiserver:v1.14.1 下载到本地镜像源

参考文章https://www.jianshu.com/p/11a804080230

下载列表

docker pull shhnwangjian/kube-apiserver:v1.14.1
docker pull shhnwangjian/kube-controller-manager:v1.14.1
docker pull shhnwangjian/kube-scheduler:v1.14.1
docker pull shhnwangjian/kube-proxy:v1.14.1
docker pull shhnwangjian/etcd:3.3.10
docker pull shhnwangjian/pause:3.1
docker pull shhnwangjian/coredns:1.3.1

重新打标签

docker tag shhnwangjian/kube-apiserver:v1.14.1 k8s.gcr.io/kube-apiserver:v1.14.1
docker tag shhnwangjian/kube-controller-manager:v1.14.1 k8s.gcr.io/kube-controller-manager:v1.14.1
docker tag shhnwangjian/kube-scheduler:v1.14.1 k8s.gcr.io/kube-scheduler:v1.14.1
docker tag shhnwangjian/kube-proxy:v1.14.1 k8s.gcr.io/kube-proxy:v1.14.1
docker tag shhnwangjian/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag shhnwangjian/pause:3.1 k8s.gcr.io/pause:3.1
docker tag shhnwangjian/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1

master节点部署

kubeadm init引导和初始化master

备注:https://k8smeetup.github.io/docs/admin/kubeadm/ (kubeadm 设置工具参考指南)

kubeadm init --apiserver-advertise-address=192.168.31.153 --pod-network-cidr=10.244.0.0/20 --kubernetes-version=v1.14.1

提示需要关闭swap

vim /etc/fstab

执行重启命令reboot now,再次执行上面的init命令

kubeadm join 192.168.31.153:6443 --token zbp38a.gv1kdti4ycnjp2j4 \
--discovery-token-ca-cert-hash sha256:0f447fa079d9db4242f2d3cb1edbe118e67b0935a8ba8dfd7501b8626d4b31be

记下其中的token,加入node节点时会用到。

初始化如果遇到问题,可以使用下面的命令进行清理再重新初始化:sudo kubeadm reset

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

查看一下集群状态,确认个组件都处于healthy状态

kubectl get cs

安装pod network(flannel)

mkdir -p ~/k8s/
cd ~/k8s
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

执行 kubectl apply -f  kube-flannel.yml

使用kubectl get pod --all-namespaces -o wide确保所有的Pod都处于Running状态

node节点部署

注意:默认token的有效期为24小时,当过期之后,该token就不可用了。此时可以重新生成token:

kubeadm token generate
kubeadm token create <generated-token> --print-join-command --ttl=0

在每台node节点执行

如果遇到问题,可以使用命令kubeadm reset进行清理再重新初始化

在master节点执行命令成功如下图

  • 配置node节点也可以使用kubectl

将master节点的admin.conf同步到node节点

scp /etc/kubernetes/admin.conf root@192.168.31.144:/etc/kubernetes

在node节点执行

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

此时可以在node节点执行kubectl命令

参考文章:

https://blog.frognew.com/2019/04/kubeadm-install-kubernetes-1.14.html

https://blog.csdn.net/liukuan73/article/details/83090350

https://draveness.me/understanding-kubernetes

kubernetes 部署的更多相关文章

  1. [系统集成] 基于Kubernetes 部署 jenkins 并动态分配资源

    基于kubernetes 部署 jenkins master 比较简单,难点是为 jenkins 动态分配资源.基于kubernetes 为 jenkins 动态分配资源需要实现下述功能: 资源分配: ...

  2. nuclio kubernetes 部署

    一张参考架构图: 从图中可以看到nuclio可以运行到docker 以及kubernetes中 提供了kubernetes 部署的脚本 安装 创建命名空间 kubectl create namespa ...

  3. Kubernetes 部署失败的 10 个最普遍原因

    [原文].后面我们可能还会看到一个 OOMKilled 错误. 我们的应用正在挂掉?为什么? 首先我们查看应用日志.假定你发送应用日志到 stdout(事实上你也应该这么做),你可以使用 kubect ...

  4. jenkins+svn+pipeline+kubernetes部署java应用(三)

    将jar包.Dockerfile.kubernetes部署yaml文件上传至svn自定义目录 一.生成流水线脚本 二.配置jenkins pipeline构建语句 三.点击构建java工程

  5. kubernetes部署高可用Harbor

    前言 本文Harbor高可用依照Harbor官网部署,主要思路如下,大家可以根据具体情况选择搭建. 部署Postgresql高可用集群.(本文选用Stolon进行管理,请查看文章<kuberne ...

  6. kubernetes部署jenkins(Docker in Docker)及认证

    引言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. 本文将Jenkins的master与slave置于Pod中,部署在namespace:jenk ...

  7. Kubernetes 部署Web UI (Dashboard)

    Kubernetes 部署Web UI (Dashboard) 项目下载地址:https://github.com/kubernetes/kubernetes/tree/master/cluster/ ...

  8. Kubernetes 部署集群内部DNS服务

    Kubernetes 部署集群内部DNS服务 部署官网:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns/ ...

  9. kubernetes部署spring cloud注册中心 Eureka

    系统环境 java JDK 1.8 Docker 18.09.6 kubernetes 1.16 创建Eureka Server 1.Maven引入相应的jar 引入 SpringBoot 做基础框架 ...

随机推荐

  1. Jmeter调用自定义jar包

    一. 场景 在测试过程中, 可能需要调用第三方jar包来生成测试数据或者使用java工具类来实现业务场景, 普遍的做法是手动调用jar包, 再把这些值赋给jmeter中的某个参数, 以满足业务测试需求 ...

  2. libevent 实现的socket 通信 server以及解决找不到动态库的方法

    注: client 个人觉得没必要用 libvent来实现就没写 注:由于 涉及到回调函数的使用 如有疑惑的可以先去了解回调函数的实现机理 先来说一下 libevent主要是干啥的 : 内部封装了 s ...

  3. 我喜欢的vs code快捷键for mac

    mac上的快捷键,尽量是像我用vs studio上靠近. cmd+K+S: 显示快捷键列 cmd+shift+p: 系统配置命令行 cmd+p:项目中文件列表,选择文件 cmd+shift+o:当前文 ...

  4. iOS 类方法 、野指针与空指针

    一.类方法: 不依赖于对象,执行效率更高; 能用类方法解决的问题,尽量使用类方法; 类方法中不能直接访问实例变量(成员变量) 二.野指针和空指针是什么?什么时候产生?怎么避免? 只要一个对象被释放了, ...

  5. windowsServer部署站点

    ### windowsServer部署站点 前言:最近在和朋友一起买了个服务器,奈何他选的是windowsServer,无所谓了,就把自己的站点从之前的虚拟主机迁过来,记录下. 准备工作: 服务器上搭 ...

  6. PhpStorm 常用快捷键

    PhpStorm 常用快捷键 File Structure 路径: Main menu > Navigate > File Structure 显示当前文件的类和函数结构,便于查找当前文件 ...

  7. 【推荐】Pencil原型设计工具

    官网:http://pencil.evolus.vn/ 试用了一下,确实感觉很好用,整体体验上是一种“舒畅”的感觉,真心点赞推荐.整体功能上没有任何多余的东西,让人感觉上手就能用.虽然个人英语水平不咋 ...

  8. C# 图片文件与字符串之间的转换

    1.将图片文件转化为字符串类型 2.将字符串类型的图片数据转换为本地图片保存

  9. Python学习案例之视频人脸检测识别

    前言 上一篇博文与大家分享了简单的图片人脸识别技术,其实在实际应用中,很多是通过视频流的方式进行识别,比如人脸识别通道门禁考勤系统.人脸动态跟踪识别系统等等. 案例 这里我们还是使用 opencv 中 ...

  10. 分享收集的WebGL 3D学习资源

    大家好,我在本文中分享了我收集的WebGL 3D相关的博客.书籍.教程.demo等内容,希望对大家学习WebGL和3D有所帮助,谢谢- 相关博客 Wonder技术 Wonder是我们的产品,包含Web ...