Bootstrap

K8S-kubeadm 一主两从 + Harbor(https) 部署

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、环境准备说明
  • 二、开始部署
    • 1.部署Harbor
    • 2.部署k8s集群
    • 3.k8s集群和Harbor构建连接,从Harbor上传下载镜像
  • 总结


一、环境准备说明

*本试验是实现kubeadm方式部署k8s的方式,连接Harbor实现容器镜像管理

*试验准备: 四台Centos7虚拟机,同一网段,四台同时操作如下步骤

1.关闭firewalld,并设置开机禁止启动

      systemctl stop  firewalld;  systemctl disable firewalld

2.关闭selinux

      vim /etc/selinux/config , 设置 SELINUX=disabled

3.关闭swap缓存

    vim /etc/fstab   把最后一行注释掉

4.升级内核,原始的Centos是内核3版本,对k8s支持不是很好,因此需要升级内核

     1.  wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

      2. rpm  -Uvh  http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
          yum --enablerepo=elrepo-kernel install -y kernel-lt

      3. 内核升级完成之后reboot

二、部署Harbor,选择四台机器的其中一台为Harbor仓库部署

  *环境部署

install docker:
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    yum -y install yum-utils
    yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
    yum -y install docker-ce
    systemctl enable docker
    systemctl start docker
    systemctl status docker
    docker --version
install docker-compose:
    curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip2.py
    python get-pip2.py
    pip install docker-compose
    docker-compose --version
download:Harbor_install package              
    https://github.com/goharbor/harbor/releases/harbor-offline-installer-v2.3.4.tgz
    tar zxvf harbor-offline-installer-v2.3.4.tgz

 *生成ca证书

*生成ca证书私钥

 cd /root/

 mkdir certs
 cd certs
 openssl genrsa -out ca.key 4096

*生成CA证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=hub.zyz.com" \
 -key ca.key \
 -out ca.crt

*配置Harbor:
    mkdir -p /data/certs
    cp hub.leffss.com.crt /data/certs
    cp hub.leffss.com.key /data/certs
    cd harbor
    cp harbor.yml.tmpl harbor.yml
*修改Harbor配置    

vi harbor.yml

     1.注释http  模式,添加https模式和生成的证书路径,不懂自行百度

     2 .初始密码修改

     3.保存退出wq;

     4../prepare;  ./install.sh   部署完成。。。。。。。。。。。。。。。。

*harbor的停止与启动
cd harbor
docker-compose stop  
docker-compose start
docker-compose down:停止并删除容器(慎用)
docker-compose up -d:创建并启动

浏览器访问 https://ip   提示网站不安全是正常的,继续浏览就可以了

其他docker访问Harbor仓库需要进行授权,在/etc/docker/daemon.json中添加

"registry-mirrors": ["https://ip"]

重新加载配置

     systemctl  daemon-reload

     systemctl restart docker

​​​​***************************************************************************************************

*使用Kubeadm方式部署k8s 一主两从集群操作如下:

*安装K8s的节点必须是大于1核心的CPU
步骤:
    1.设置系统主机名以及Host文件的互相解析
    2.安装依赖包:
       yum install -y conntrack ntpdate ntp ipvsadm  iptables curl sysstat libseccomp wget vim net-tools git
    3.k8s初始化的时候会检测系统中有没有虚拟化内存,如果有就报错
        
    4.调整内核参数,对于K8S
    cat > kubernetes.conf <<EOF
    net.bridge.bridge-nf-call-ip6tables=1
    net.bridge.bridge-nf-call-iptables=1
    net.ipv4.ip_forward = 1
    net.ipv6.conf.all.disable_ipv6=1 
    EOF
    5.设置k8s配置开机能被调用:
        cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
        sysctl -p /etc/sysctl.d/kubernetes.conf
    调整系统时区为上海:系统本身就是:不需要
    6.关闭系统不需要的服务:
         systemctl  stop postfix && systemctl disable postfix
    7:设置 rsyslogd 和 systemdjournald
   
    mkdir /var/log/journal 
    mkdir /etc/systemd/journald.conf.d
    cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
    [Journal]
    #持久化保存到磁盘
    Storage=persistent
    #压缩历史日志
    Compress=yes
    SyncIntervalSec=5m
    RateLimitInterval=30s
    RateLimitBurst=1000
    #最大占用空间10G
    SystemMaxUse=10G
    #单日志文件最大200M
    SystemMaxFileSize=200M
    #日志保存时间2周
    MaxRetentionSec=2week
    #不将日志转发到 syslog
    ForwardToSyslog=no
    EOF
    systemctl  restart  systemd-journald
*设置开机从新内核启动
    grub2-set-default "CentOS Linux (4.4.182-1.el7.elrepo.x86_64) 7 (Core)"
*安装docker软件
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7  -y 指定docker版本安装,否则初始化报错
*设置启动docker和开机自启
*创建/etc/docker 目录
 mkdir  -p /etc/docker
 #配置daemon  docker子配置文件
 cat > /etc/docker/daemon.json <<EOF
 {
     "registry-mirrors": ["https://hl5vjt48.mirror.aliyuncs.com"],
     "exec-opts": ["native.cgroupdriver=systemd"], 
     "log-driver": "json-file",  存储日志的方式改为json格式
     "log-opts": {
         "max-size": "100m"   存储日志的大小为100MB ,可以通过/var/log/xxx 来查看容器的信息
     }
 }
 EOF
 *创建目录用于存放docker的配置文件
 mkdir -p /etc/systemd/system/docker.service.d
 *重启docker服务:
 systemctl daemon-reload && systemctl restart docker && systemctl enable docker
*************************
安装Kubeadm(主从配置)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

yum -y install kubeadm-1.15.1 kubectl-1.15.1  kubelet-1.15.1
systemctl enable kubelet.service  设置开机自启

初始化主节点:
   *先下载需要的镜像,配置/etc/docker/daemon.json  配置aliyun的docker仓库,然后查看本架构需要的包:kubeadm config images list
使用脚本去批量下载:
images=(
        kube-apiserver:v1.15.12
        kube-controller-manager:v1.15.12
        kube-scheduler:v1.15.12
        kube-proxy:v1.15.12
        pause:3.1
        etcd:3.3.10
        coredns:1.3.1
        )

for imageName in ${images[@]}; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName  k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done

#初始化主节点:  只在master上执行
      kubeadm  config print init-defaults >kubeadm-config.yml  把k8s默认的初始化模版导入kubeadm-config.yml中

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 1.2.3.4    #修改为当前的服务器节点地址::注意: 修改为当前服务器地址,修改为当前服务器地址
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: master01
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.14.0  #修改为当前k8s的版本
networking:
  dnsDomain: cluster.local
  #添加一个配置
  podSubnet: "10.244.0.0/16"
  serviceSubnet: 10.96.0.0/12
scheduler: {}
#把k8s的调度方式改为ipvs的调度方式
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
    SupportIPVSProxyMode: True
mode: ipvs

# 进行kubead的初始化
kubeadm init --config=kubeadm-config.yml --experimental-upload-certs | tee kubeadm-init.log      --experimental-upload-certs:用于给其他主节点自动颁发证书,适用于高可用架构
#部署flannel网络:
下载kube-flannel.yml
* 创建网络:kubectl create -f kube-flannel.yml
* 查看pod下命名空间为kube-system的信息
kubectl get pod -n kube-system,如果不加kube-system默认是default命名空间,k8s所有的组件都在kube-system命名空间中
*把node节点加入到master中
*如果还是NoReady:是因为网络还没有在其他新加入的节点初始化,等一会,也可以运行:kubectl get pod -n kube-system -o wide查看详细的

至此:K8S-kubeadm + Harbor(https) 搭建完成。

;