ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

从k8s集群搭建到拉取私有库镜像对外服务

2021-05-03 08:32:37  阅读:175  来源: 互联网

标签:kube 命令 etc master 镜像 k8s root 到拉取


网上有很多教程是写如何如何搭建一个k8s集群的,其实有的文章我看了就头晕,所以干脆自己来写一篇

简单聊一下k8s

我们平时用docker部署几个容器,可以花很少的时间去管理和维护,但是假如在生产环境中有几百个容器,这该如何管理,并且还能保证我们的服务实现高可靠,高并发,于是k8s就出现了。
他能为我们提供一个可弹性运行分布式系统的框架,主要可以为我们实现以下功能

  • 服务发现、负载均衡
  • 自动部署和回滚
  • 自动完成装箱计算(比如弹性伸缩)
  • 自我修复

好了直接切入主题,在我们开始搭建之前,已经假设你对k8s的基础架构已经有一定的认识

我用的vm虚拟机建立了2台linux服务器,每台2G内存和2CPU(最好是三台及三台以上的奇数个服务器),其中一台为master,其余一台是node节点,linux内核版本为7.9,k8s client和server的版本都是1.5.2(yum包的最新版本)

角色 主机名 IP地址
Master master 192.168.175.3
Node node1 192.168.175.250

接下来我们会分为以下四个步骤

  • 准备系统环境(所有节点)
  • 配置master
  • 配置minion节点(node)*到这里集群已经搭建完毕
  • 拉取镜像启动服务

第一步:将系统环境准备好,以便这些因素不会影响我们的搭建,如下所示,你只需要复制粘贴就可以了,每台机器都要这样做

# 关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
# 关闭selinux
# 临时禁用selinux
setenforce 0
# 永久关闭 修改/etc/sysconfig/selinux文件设置
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 禁用交换分区
swapoff -a
# 永久禁用,打开/etc/fstab注释掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab
# 修改内核参数
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

第二步:配置master

  • 从yum包安这几个服务,k8s默认安装最新的,目前是1.5.2
命令:[root@master ~]# yum install -y kubernetes etcd flannel ntp
命令:[root@node1 ~]# yum install -y kubernetes etcd flannel ntp
  • 配置etcd
命令:[root@master ~]# vim /etc/etcd/etcd.conf                  #修改以下配置
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://192.168.175.3:2379"
ETCD_NAME="etcd"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.175.3:2379"

  • 启动服务
命令:[root@master ~]# systemctl start etcd
命令:[root@master ~]# systemctl status etcd
命令:[root@master ~]# systemctl enable etcd

  • 查看状态
命令:[root@master ~]# ss -antulp | grep 2379

  • 检查 etcd 集群成员列表
命令:[root@master ~]# etcdctl member list 只有一台

  • 配置master配置文件
命令:[root@master ~]# vim /etc/kubernetes/config                    #修改以下配置文件
KUBE_MASTER="--master=http://192.168.175.3:8080"

  • 配置apiserver配置文件
命令:[root@master ~]# vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.175.3:2379"
KUBE_ADMISSION_CONTROL="--admission-control=AlwaysAdmit"

  • 配置 kube-scheduler 配置文件
命令:[root@master ~]# vim /etc/kubernetes/scheduler
KUBE_SCHEDULER_ARGS="0.0.0.0"

  • 配置 etcd,指定容器云中 docker 的 IP 网段
命令:[root@master ~]# etcdctl mkdir /k8s/network
命令:[root@master ~]# etcdctl set /k8s/network/config '{"Network": "10.255.0.0/16"}'
命令:[root@master ~]# etcdctl get /k8s/network/config

  • 设置flanneld服务
命令:[root@master ~]# vim /etc/sysconfig/flanneld

FLANNEL_ETCD_ENDPOINTS="http://192.168.175.3:2379"
FLANNEL_ETCD_PREFIX="/k8s/network"
FLANNEL_OPTIONS="--iface=ens33"                           #设置自己的通信物理网卡

  • 启动master上4个服务
命令:[root@master ~]# systemctl restart kube-apiserver kube-controller-manager kube-scheduler flanneld
命令:[root@master ~]# systemctl status kube-apiserver kube-controller-manager kube-scheduler flanneld
命令:[root@master ~]# systemctl enable kube-apiserver kube-controller-manager kube-scheduler flanneld

第三步,配置minion节点

  • 配置flanneld服务
命令:[root@node1 ~]# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.175.3:2379"
FLANNEL_ETCD_PREFIX="/k8s/network"
FLANNEL_OPTIONS="--iface=ens33"

  • 配置kube下的config
命令:[root@node1 ~]# vim  /etc/kubernetes/config
KUBE_MASTER="--master=http://192.168.175.3:8080"

  • 配置kubelet
命令:[root@node1 ~]# vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=node1"
KUBELET_API_SERVER="--api-servers=http://192.168.175.3:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

  • 启动node1服务
命令:[root@node1 ~]# systemctl restart flanneld kube-proxy kubelet docker
命令:[root@node1 ~]# systemctl enable flanneld kube-proxy kubelet docker
命令:[root@node1 ~]# systemctl status flanneld kube-proxy kubelet docker
  • 在masters上运行 命令:[root@master ~]# kubectl get nodes 可以看到ready状态的node1

***至此k8s集群已经搭建完毕

第四步,从自己私有镜像库拉取镜像并部署服务

  • 创建一个Deployment类型的yml文件,取名为k8s_deployment,yml,其内容如下
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: hello-k8s
spec:
replicas: 2
template:
  metadata:
    labels:
      app: hello-k8s
  spec:
    containers:
      - name: k8s
        image: liuqiangdocker/qiangk8s:v1.0
        ports:
          - containerPort: 8888
  • 创建一个service yml,取名为k8s_service.yml
apiVersion: v1
kind: Service
metadata:
  name: hello-k8s
spec:
  type: NodePort
  ports:
    - port: 8888
      nodePort: 30001
  selector:
    app: hello-k8s

  • 通过命令根据yml来创建并运行我们的容器
kubectl create -f k8s_deployment.yml
kubectl create -f k8s_service.yml

**********
特别特别注意:由于k8s版本更迭太快,1.5.2不支持apiVersion: apps/v1  service: Deployment,如果报 kind not match相关的很大可能是版本不对
  • 查看master
我们可以用 kubectl get pod 来查看我们创建的容器,因为我在deployment里面,将replica设置为2

如果你发现你的pod处于ContainerCreating状态,可以用这个命令查看pod的细节 kubectl describe pod 你的pod名,主要看detail,我就出现这个问题


查了资料原来是这个目录是一个空目录,通过软链指过去的,这篇文章可以解决你的问题
转载 https://blog.csdn.net/weixin_37480442/article/details/81949217

  • 你可以通过每个pod的clusterIP:端口号(是容器的端口号,不是nodePort,kubectl get service )来访问这个web服务
    custerIP可以通过kubectl get Pods -o wide 获得
  • 你也可以使用minion的ip地址加端口号(nodePort的端口号,就是外部端口)***不要用master的IP+端口,因为集群master不承担业务功能,只起到管理功能,业务由其他minion节点承担

Over,欢迎读者交流

标签:kube,命令,etc,master,镜像,k8s,root,到拉取
来源: https://www.cnblogs.com/agopher/p/14726867.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有