kubeadm 安装 k8s

全局说明

```
# etcd节点x1 : 注意etcd集群必须是奇数个节点
# master节点x1 : 没有奇数偶数的限制,后面可以根据实际情况再增加节点数,因为通过keepalived和haproxy来实现的高可用,所以需要额外规划一个master VIP(虚拟地址)
# node节点x3 : 真正应用负载的节点,后面可以根据实际情况再增加节点数
```

全节点配置

  1. 安装docker-ce

    $ cd /etc/yum.repos.d/
    # 将repo同步到各节点
    $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # 所有节点安装docker
    ## 此处检查本地与网络镜像版本,通常用高版本,检查文件 /etc/yum.repo.d/CentOS-Base.repo 中的 baseurl
    $ yum -y install docker-ce
    
  2. 修改内核参数

    # 开启ipv6,否则会造成coredns容器无法启动
    $ cat <<EOF >  /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward=1EOF
    $ sysctl --system
    
  3. 关闭swap

    # k8s1.8版本以后,要求关闭swap,否则默认配置下kubelet将无法启动
    $ swapoff -a
    # 防止开机自动挂载 swap 分区
    $ sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
    
  4. 开启ipvs

    # master的高可用和集群服务的负载均衡要用到ipvs,所以加载内核的以下模块
    $ modprobe -- ip_vs; \
    modprobe -- ip_vs_rr; \
    modprobe -- ip_vs_wrr; \
    modprobe -- ip_vs_sh; \
    modprobe -- nf_conntrack_ipv4
    # 检查
    $ cut -f1 -d " "  /proc/modules | grep -e ip_vs -e nf_conntrack_ipv4$ yum install ipset -y
    
  5. 禁用selinux,关闭防火墙,dns,ssh,ntp

    # 检测selinux
    $ getenforce
    # 修改方法一,直接修改配置文件,将SELinux设为Disabled
    $ vi /etc/selinux/config
    # 修改方法二
    $ sed -i 's@^\SELINUX=).*@\ldisabled@' /etc/sysconfig/selinux
    $ setenforce 0
    
    # 关闭防火墙,或开启指定端口
    $ systemctl disable firewalld
    $ systemctl stop firewalld
    
    # 生成ssh秘钥
    $ ssh-keygen -t rsa -P ""
    
    # 同ntp,使用互联网时间
    $ yum install chrony
    # 重置时间
    $ systemctl enable chronyd.service
    $ systemctl start chronyd.service
    $ systemctl restart chronyd
    
  6. 所有节点安装 kubeadm, kubelet 和 kubectl

    # 添加源
    $ cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF# 安装时最好加上版本号
    ## 禁用除kubernetes之外的仓库 --disableexcludes=kubernetes
    $ yum install -y kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1 --disableexcludes=kubernetes# 查看docker驱动类型
    $ docker info| grep Cgroup
    ##? 如果查到的结果为 cgroupfs,修改kubeadm的配置文件如下$ vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    ##? 添加如下配置Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
    
    # 设置开机启动kubelet
    $ systemctl enable kubelet
    ## 注意,这里不需要启动kubelet,初始化的过程中会自动启动的,如果此时启动了会出现如下报错,日志在
    $ tail -f /var/log/messages
    
  7. 拉取k8s必须的镜像

    # 方法一
    # 拉镜像
    $ kubeadm config images list |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#mirrorgooglecontainers#g' |sh -x
    $ docker pull coredns/coredns
    # 修改tag,将镜像标记为k8s.gcr.io的名称
    $ docker images |grep mirrorgooglecontainers |awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's#mirrorgooglecontainers#k8s.gcr.io#2' |sh -x
    $ docker tag coredns/coredns k8s.gcr.io/coredns
    # 删除无用的镜像
    $ docker images | grep mirrorgooglecontainers | awk '{print "docker rmi "$1":"$2}' | sh -x
    $ docker rmi coredns/coredns
    
    # 方法二(当前使用)
    # 修改kubeadm配置文件中的docker仓库地址imageRepository,注意:此方法只适用于1.13版本以上
    # 生成配置文件
    $ cd ~; kubeadm config print init-defaults > kubeadm.conf
    # 将配置文件中的 imageRepository: k8s.gcr.io 改为你自己的私有docker仓库
    ## 这里创建阿里镜像仓库,修改 imageRepository: registry.cn-zhangjiakou.aliyuncs.com/isoftwork
    ## 注意版本 kubernetesVersion: v1.15.1
    $ vi kubeadm.con
    # 拉取镜像
    $ kubeadm config images list --config kubeadm.conf
    $ kubeadm config images pull --config kubeadm.conf
    # 批量修改镜像为k8s指定镜像名,匹配版本tag
    ## grep 及 s### 使用自定义的仓库名,根据实际配置 imageRepository
    $ docker images |grep registry.cn-zhangjiakou.aliyuncs.com/isoftwork | \
    awk '{print "docker tag ",$1":"$2,$1":"$2}' | \
    sed -e 's#registry.cn-zhangjiakou.aliyuncs.com\/isoftwork#k8s.gcr.io#2' |sh -x
    # 删除无用镜像
    $ docker images | grep registry.cn-zhangjiakou.aliyuncs.com/isoftwork | \
    awk '{print "docker rmi "$1":"$2}' | sh -x
    
  8. 设置开机启动

    $ systemctl enable kubelet.service
    $ systemctl enable docker.service
    

主节点

  1. docker

  2. 初始化 kubeadm

    ## 指定网络插件flannel默认配置 --pod-network-cidr=10.244.0.0/16
    ## 忽略cpu不足 --ignore-preflight-errors=NumCPU,2C 以上可不加
    ## 注意版本,当前为1.15.1
    $ kubeadm init --pod-network-cidr=10.244.0.0/16 \
    --ignore-preflight-errors=NumCPU \
    --kubernetes-version=1.15.1
    ## 注意:kubeadm 初始化完成后,会在最后输出 node 节点接入 master 节点的方法,token、ca是自动生成的kubeadm join 10.152.240.101:6443 \
    --token uyqmcc.oha7kuwz7cd0a6ty \
    --discovery-token-ca-cert-hash sha256:0482a2f22c5aa57f41034e2261f98eb32cf5d55f5d20c2455203c4e87ae4822c
    
    # 机器上的用户要操作集群,需要做如下配置:
    ## 如普通用户要执行 kubectl 命令,需执行以下命令在用户目录下生成特定认证文件,不可做额外编辑
    $ mkdir -p $HOME/.kube
    $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    
    
  3. 安装 flannel

    # 下载
    $ cd ~; wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    # flannel 默认会使用主机的第一张网卡,如果你有多张网卡,需要通过配置单独指定
    ## 当前环境网卡名为 ens192,通过 ifconfig 查看
    ## 修改位置 containers: args:,加入 - --iface=ens33
    ## 本地环境当前无需配置此项$ vim kube-flannel.yml
    # 安装
    $ kubectl apply -f kube-flannel.yml
    
    # 查看节点状态(需要等待),Master状态变成Ready状态
    $ kubectl get pods --all-namespaces
    ## 不是running状态,就说明出错了,查看描述$ kubectl describe pod kube-scheduler-master.hanli.com -n kube-system
    ## 查看日志$ kubectl logs kube-scheduler-master.hanli.com -n kube-system
    
  4. 检测集群是否搭建完成

    # 节点状态
    $ kubectl get nodes
    # 组件状态
    $ kubectl get cs
    # 服务账户
    $ kubectl get serviceaccount
    # 集群信息
    $ kubectl cluster-info
    #? 验证dns功能
    $ ~/heapster-1.6.0-beta.1/deploy/kube-config/influxdb$ kubectl run curl --image=radial/busyboxplus:curl -it
    $ nslookup kubernetes.default
    
  5. 测试集群功能是否正常

    # 创建服务
    $ kubectl run nginx --replicas=2 --labels="run=load-balancer-example" --image=nginx  --port=80
    $ kubectl expose deployment nginx --type=NodePort --name=example-service
    $ kubectl describe service example-service# 服务状态
    $ kubectl get service# 查看pod
    $ kubectl get pods# 访问集群 service ip
    $ curl 10.152.240.101:80
    #?(kubectl describe未生成endpoint) 访问 endpoint,与访问服务ip结果相同
    $ curl 10.244.1.4:80
    $ curl 10.244.3.2:80
    #? 访问 node 节点 ip,与访问集群ip相同
    $ curl 192.168.255.121:30952
    $ curl 192.168.255.122:30952
    $ curl 192.168.255.123:30952
    
  6. 集群部署完成


node 节点(需奇数)

  1. 加入master

    # 假设主节点 token 为 uyqmcc.oha7kuwz7cd0a6ty,ca 为 sha256:0482a2f22c5aa57f41034e2261f98eb32cf5d55f5d20c2455203c4e87ae4822c,则子节点加入方式如下
    $ kubeadm join 10.152.240.101:6443 \
    --token uyqmcc.oha7kuwz7cd0a6ty \
    --discovery-token-ca-cert-hash sha256:0482a2f22c5aa57f41034e2261f98eb32cf5d55f5d20c2455203c4e87ae4822c
    ## 若出现端口占用,则重置 kubeadm$ kubeadm reset
    
  2. 同步master认证

    # root权限下创建
    $ cd ~; mkdir .kube
    # 将 master:/etc/kubernetes/admin.conf 同步到 .kube,并改为 config 文件
    $ scp master@master-ip:/etc/kubernetes/admin.conf ~/.kube/config# 查看集群状态
    $ kubectl get nodes
    

kubernetes-dashboard

  1. master 节点创建pod

    # 创建或拉取 kubernetes-dashboard.yaml(此处为创建)
    ## 文件已上传到 gitee,可直接 clone
    $ wget https://gitee.com/beborn/kubernetes-yaml/blob/master/kubernetes-dashboard.yaml
    ## 文件中已修改 image 为可用镜像
    # 拉取 k8s 用户 kubernetes-dashboard-adminuser.yaml
    $ wget https://gitee.com/beborn/kubernetes-yaml/blob/master/kubernetes-dashboard-adminuser.yaml
    # 拉取 k8s 用户绑定角色 kubernetes-dashboard-adminrolebind.yaml
    $ wget https://gitee.com/beborn/kubernetes-yaml/blob/master/kubernetes-dashboard-adminrolebind.yaml
    
    # 删除已存在的service,使用创建文件,多数情况下删除service则关联删除pod
    $ kubectl delete -f kubernetes-dashboard.yaml
    # 重新创建service
    $ kubectl create -f kubernetes-dashboard.yaml# 创建用户
    $ kubectl create -f kubernetes-dashboard-adminuser.yaml
    # 查看用户token,登录 dashboard 时用户身份验证
    $ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')# 绑定用户角色
    $ kubectl create -f kubernetes-dashboard-adminrolebind.yaml
    
  2. 创建证书

    # TODO
    ## api server 方式访问,不需证书
    
  3. 访问

    # 查看pod
    $ kubectl get pods --all-namespaces
    ##  删除pod$ kubectl delete pod ${POD_NAME} -n ${NAME_SPACE}# 访问地址
    ## 加入用户 token
    https://10.152.240.101:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
    

常见问题

  1. pod删除后无限重启 参考

参考

  1. kubeadm安装kubernetes1.13集群
  2. k8s-dashboard token验证配置

转载于:https://my.oschina.net/beborn/blog/3080001

centos7 kubernetes相关推荐

  1. kubernetes1.16 错误排查

    目录 一.环境说明 问题:K8S集群的node节点为NotReady状态 1.使用kubectl get node命令,查看集群的状态. 2.到node节点查看组件的状态 3.于是我查看master节 ...

  2. [没接触过kubevirt?]15分钟快速入门kubevirt

    文章目录 本文介绍 前言 环境准备 详细版 搭建步骤 安装KubeVirt 安装virtctl客户端工具 创建VirtualMachine 启动VirtualMachineInstance 启动和停止 ...

  3. Docker实践(6)—CentOS7上部署Kubernetes

    Kubernetes架构 Kubernetes的整体架构如下: Master为主控节点,上面运行apiserver,scheduler,controller-manager等组件.Minion相当于工 ...

  4. centos7 yum安装kubernetes 1.1

    前提:centos7 已经update yum update -y 一.创建yum源 master,slave都要 kubernetes release 版本 yum源 http://cbs.cent ...

  5. 基于Centos7构建Kubernetes平台

    防伪码:我已经过了餐桌上有只鸡就一定能吃到鸡腿的年纪了. Kubernetes作为Docker生态圈中重要一员,是Google多年大规模容器管理技术的开源版本,是产线实践经验的最佳表现[G1].如Ur ...

  6. 在CENTOS7下安装kubernetes填坑教程(原创)

    kubernetes(以下简称"k8s")目前是公认的最先进的容器集群管理工具,在1.0版本发布后,k8s的发展速度更加迅猛,并且得到了容器生态圈厂商的全力支持,这包括coreos ...

  7. Centos7搭建Kubernetes集群

    @Author:By Runsen Kubernetes Kubernetes 及其整个生态系统(工具.模块.插件等)均使用 Go 语言编写,从而构成一套面向 API.可高速运行的程序集合,这些程序文 ...

  8. CentOS7.2中使用Kubernetes(k8s)1.4.6源码搭建k8s容器集群环境

    一.相关准备工作 1.1.准备工作 准备至少两台已安装好CentOS7.2操作系统的物理机或者虚拟机(本文配置时使用的是三台KVM虚拟机): 设置hostname命令: hostnamectl set ...

  9. centos7安装kubernetes 1.1

    原文地址:http://foxhound.blog.51cto.com/1167932/1717105 前提:centos7 已经update yum update -y 一.创建yum源 maste ...

最新文章

  1. linux看硬盘io,linux查看硬盘IO
  2. 百度:I am from China, wait, am I?
  3. Java集合源码学习(五)几种常用集合类的比较
  4. 【遥感数字图像处理】实验:遥感图像显示与数据输入/输出(Erdas版)
  5. TatukGIS - GisDefs - CheckFileWriteAccess 函数
  6. Android——ASM 极速上手 简单使用
  7. 【python nc文件】10分钟教你python读取nc文件
  8. AutoCAD二次开发——引线标注
  9. 微信小程序实现蓝牙开门前后端项目(一)
  10. word如何删除空行和全角空格_word中删除全角空格和空行
  11. webdriver爬虫#document问题
  12. LZY的游戏(YYOJ)
  13. dns 性能测试 dnsperf
  14. 买就赚到的以色列人工智能
  15. 【Linux系列文章】磁盘、进程
  16. 1055 习题4-9-3 逆序输出正整数各位上数字
  17. 使用LPC1768实现的数字时钟和温度计
  18. 【机器学习之随机森林】
  19. QPST download crash内存
  20. 【IEEE-CPS出版,往届已检索】第二届计算机图形学、图像与虚拟化研究国际会议(ICCGIV 2022)

热门文章

  1. 自动化测试实战笔记--网易云实现QQ登录
  2. 从《进化/运维技术变革与实践探索》看运维体系建设与个人成长
  3. 冷笑话大集合,越往后越冷哦
  4. Chess Tournament(思维题)
  5. MapStruct、ignore
  6. 男教师的着装面试礼仪
  7. Cocosd2d-js 实现模态对话框
  8. YOLOv5改进之十七:CNN+Transformer——融合Bottleneck Transformers
  9. 华为的系统鸿蒙怎么样,华为鸿蒙2.0来了,这些功能比安卓iOS好用!
  10. Median Pyramid Hard题解