搭建環境作業系統: macOS 10.15.2虛擬機器: VMware Fusion 11.5虛擬機器系統: centos 7 64Kubernetes 15.1Harbor 2.1.0
叢集規劃
勾選允許該網路上的虛擬機器連線到外部網路(使用 NAT )子網 ip (例如 192.168.8.0)子網掩碼 255.255.255.02、mac 主機上檢查 vnet 配置可以看到之前我們加的 vnet4
answer VNET_1_VIRTUAL_ADAPTER yesanswer VNET_4_DHCP yesanswer VNET_4_HOSTONLY_NETMASK 255.255.255.0answer VNET_4_HOSTONLY_SUBNET 192.168.8.0answer VNET_4_NAT yesanswer VNET_4_NAT_PARAM_UDP_TIMEOUT 30answer VNET_4_VIRTUAL_ADAPTER yesanswer VNET_8_DHCP yes複製程式碼複製程式碼
3、檢查 vnet4 的配置cat /Library/Preferences/VMware\ Fusion/vmnet4/nat.conf
在看到 vnet4 的 gateway ip 和 mask
# NAT gateway addressip = 192.168.8.2netmask = 255.255.255.0複製程式碼複製程式碼
4、修改虛擬機器網路配置
虛擬機器 -> 設定 -> 網路介面卡設定 -> vmnet4
5、修改 Linux 虛擬機器的網絡卡配置檔案vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改後的檔案如下(參考有註釋的行):
TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=static # 修改本行,預設值為dhcp,改為staticDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens33UUID=b4bd9a95-905e-471a-9313-f7a668a8af5dDEVICE=ens33ONBOOT=yes # 修改本行,預設值為no,改為yesIPADDR=192.168.8.10 # 新增本行NETMASK=255.255.255.0 # 新增本行GATEWAY=192.168.8.2 # 新增本行,這是前面vnet2的gateway ipDNS1=114.114.114.114 # 新增本行復制程式碼複製程式碼
6、重啟 linux 虛擬機器網絡卡systemctl restart network
7、驗證在 Linux 虛擬機器中:ping mac 主機 , ping www.baidu.com在 mac 主機中: ping 192.168.8.10 即剛剛為虛擬機器設定的靜態 ip系統初始化#在不同主機設定主機名hostnamectl set-hostname k8s-master-1hostnamectl set-hostname k8s-node-1hostnamectl set-hostname k8s-node-2複製程式碼
配置 host
cat >> /etc/hosts <<EOF 192.168.0.10 k8s-master-01 192.168.0.21 k8s-node-01 192.168.0.22 k8s-node-02 EOF
設定完,同步到其他機器
scp /etc/hosts root@k8s-node-01:/ect/hostsscp /etc/hosts root@k8s-node-02:/ect/hosts複製程式碼
安裝依賴包1、安裝基礎依賴:
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git#備份yum源mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak#下載阿里yum源wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo#更新yum快取yum clean allyum makecache複製程式碼
2、設定防火牆為 iptables#關閉防火牆 firewalld systemctl stop firewalld && systemctl disable firewalld#下載iptablesyum install -y iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save複製程式碼
3、關閉 selinux 和 swapoff 分割槽
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstabsetenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config複製程式碼
4、調整核心引數,對於 K8S
cat > kubernetes.conf <<EOFnet.bridge.bridge-nf-call-iptables=1 # 這兩條是開啟網橋模式net.bridge.bridge-nf-call-ip6tables=1net.ipv4.ip_forward=1net.ipv4.tcp_tw_recycle=0vm.swappiness=0 # 禁止使用 swap 空間,只有當系統 OOM 時才允許使用它vm.overcommit_memory=1 # 不檢查物理記憶體是否夠用vm.panic_on_oom=0 # 開啟 OOMfs.inotify.max_user_instances=8192fs.inotify.max_user_watches=1048576fs.file-max=52706963fs.nr_open=52706963net.ipv6.conf.all.disable_ipv6=1 # 關閉 ipv6 協議net.netfilter.nf_conntrack_max=2310720EOF複製程式碼
5、調整系統時區# 設定系統時區為 中國/上海timedatectl set-timezone Asia/Shanghai# 將當前的 UTC 時間寫入硬體時鐘timedatectl set-local-rtc 0# 重啟依賴於系統時間的服務systemctl restart rsyslogsystemctl restart crond複製程式碼
6、關閉系統不需要的服務
systemctl stop postfix && systemctl disable postfix
7、設定 rsyslogd 和 systemd journaldcentos7 以後,系統引導方式改為了 systemd ,它會存在兩個日誌系統在工作
mkdir /var/log/journal # 持久化儲存日誌的目錄mkdir /etc/systemd/journald.conf.dcat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF[Journal]# 持久化儲存到磁碟Storage=persistent# 壓縮歷史日誌Compress=yesSyncIntervalSec=5mRateLimitInterval=30sRateLimitBurst=1000# 最大佔用空間 10GSystemMaxUse=10G# 單日誌檔案最大 200MSystemMaxFileSize=200M# 日誌儲存時間 2 周MaxRetentionSec=2week# 不將日誌轉發到 syslogForwardToSyslog=noEOFsystemctl restart systemd-journald複製程式碼
8、 升級核心到4.4rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm# 安裝完成後檢查 /boot/grub2/grub.cfg 中對應核心 menuentry 中是否包含 initrd16 配置,如果沒有,再安裝一次!複製程式碼
yum --enablerepo=elrepo-kernel install -y kernel-lt
設定開機從新核心啟動grub2-set-default 'CentOS Linux (4.4.189-1.el7.elrepo.x86_64) 7 (Core)'reboot複製程式碼
安裝 k8s1、kube-proxy 開啟 ipvs 的前置條件
這裡需要注意一下, kube-proxy 1.13 以下版本,將依賴 nf_conntrack_ipv4,如果是使用的 kube-proxy 1.13 一下版本,需要將 nf_conntrack 更換為 nf_conntrack_ipv4
modprobe br_netfiltercat > /etc/sysconfig/modules/ipvs.modules <<EOF#!/bin/bashmodprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- nf_conntrack_ipv4EOFchmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4複製程式碼
2、安裝 dockeryum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum update -y && yum install -y docker-ce複製程式碼
# 建立 /etc/docker 目錄mkdir /etc/docker# 配置 daemon.insecure-registries 允許Docker使用無許可權驗證的 Docker Registry 即私有映象倉庫 Harborcat > /etc/docker/daemon.json <<EOF{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","registry-mirrors": ["這裡可以寫你的阿里雲映象加速地址"],"log-opts": {"max-size": "100m"},"insecure-registries": ["hub.czp.com"]}EOFmkdir -p /etc/systemd/system/docker.service.d# 重啟docker服務systemctl daemon-reload && systemctl restart docker && systemctl enable docker複製程式碼
3、所有節點安裝 Kubeadmcat > /etc/yum.repos.d/kubernetes.repo <<EOF[kubernetes]name=Kubernetesbaseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOFyum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1systemctl enable kubelet.service複製程式碼
安裝完 Kubeadm 後,可以把這個虛擬機器作為模版,後續建立新的節點的時候,基於這個虛擬機器克隆即可
4、初始化 k8s-master-01 主節點# 生成kubeadm-config配置檔案kubeadm config print init-defaults > kubeadm-config.yaml# 然後開啟這個檔案,修改幾個引數vim kubeadm-config.yamlimageRepository: registry.aliyuncs.com/google_containers #修改下映象地址advertiseAddress: 192.168.8.10 # masteripkubernetesVersion: v1.15.1 # kubeadmin版本networking:podSubnet: "10.244.0.0/16" # 必須是這個ipserviceSubnet: 10.96.0.0/12# 然後在末尾新增如下內容,支援ipvs---apiVersion: kubeproxy.config.k8s.io/v1alpha1kind: KubeProxyConfigurationfeatureGates: SupportIPVSProxyMode: truemode: ipvs複製程式碼
# 開始初始化kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log#檢視是否初始化成功grep "initialized successfully" kubeadm-init.log #初始化成功後的後續操作mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config#把初始化的配置和日誌儲存起來mkdir install-k8s mv kubeadm-init.log kubeadm-config.yaml install-k8swget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkubectl apply -f kube-flannel.yml# 我在這邊遇到了一個問題。quay.io/coreos/flannel 映象一直無法正常 pull,我是在 https://github.com/coreos/flannel/releases 中下載後,上傳到虛擬機器,安裝手動 load 到 docker 中。scp ./flanneld-v0.13.1-rc1-amd64.docker [email protected]:/rootdocker load < flanneld-v0.13.1-rc1-amd64.docker#檢視 node 狀態kubectl get node複製程式碼
5、從節點初始化 k8s-node-0XXX可以基於上文提到的模版,克隆一個虛擬機器作為節點,只要修改下 ip 地址即可。
從上一步的日誌中,拿到初始化的命令
kubeadm join 192.168.8.10:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:1d853fdcfd4c933dee2c13b8e5ee7ac91fd85225d4c6f96f05d9a1997591012c複製程式碼
token 是24小時有效,過期後可以使用 kubeadm token create 來重新生成 執行成功後,稍等一會,到 master 上執行
kubectl get node複製程式碼
看到 node 是 ready 狀態即可。
NAME STATUS ROLES AGE VERSIONk8s-master01 Ready master 77m v1.15.1k8s-node-1 Ready <none> 69m v1.15.1複製程式碼
6、幾個常用命令檢視 pod 詳情
kubectl describe pod xxx
檢視 pod 內某個容器的日誌kubectl log podXXX -c containerXXXX
進去pod 的容器,如果 pod 內有多個容器,使用 -c 引數指定kubectl exec podXXXX -it -- /bin/sh
安裝 Harbo 私有映象倉庫安裝 dockeryum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum update -y && yum install -y docker-ce複製程式碼
## 建立 /etc/docker 目錄mkdir /etc/docker# 配置 daemon. insecure-registries 是後續用來訪問 harbor 私有倉庫的, 表示可信任的倉庫地址cat > /etc/docker/daemon.json <<EOF{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","registry-mirrors": ["https://tosnxdv7.mirror.aliyuncs.com"],"log-opts": {"max-size": "100m"}"insecure-registries": ["hub.czp.com"]}EOFmkdir -p /etc/systemd/system/docker.service.d# 重啟docker服務systemctl daemon-reload && systemctl restart docker && systemctl enable docker複製程式碼
安裝 docker-compose
wget https://linux-soft-ware.oss-cn-shenzhen.aliyuncs.com/docker-composechmod +x docker-composemv docker-compose /usr/local/bin複製程式碼
安裝 Harbor
下載地址:https://github.com/goharbor/harbor/releases 這裡我使用的是 2.1.0 版本
# 解壓縮tar xf harbor-offline-installer-v2.1.0.tgz# 編輯配置檔案vi harbor.yml# 這裡我們需要修改 2 個地方# 1,設定域名,這裡要跟之前的 docker/daemon.json 裡的 insecure-registries 保持一致。hostname = hub.czp.com# 2,設定 https 的金鑰和證書https: # https port for harbor, default is 443 port: 443 # The path of cert and key files for nginx certificate: /data/cert/server.crt private_key: /data/cert/server.key複製程式碼
複製程式碼
建立證書mkdir /data/cert -p複製程式碼
1、建立金鑰
openssl genrsa -des3 -out server.key 2048Generating RSA private key, 2048 bit long modulus............................................................+++..............................................+++e is 65537 (0x10001)Enter pass phrase for server.key: 輸入密碼 123456Verifying - Enter pass phrase for server.key: 輸入密碼 123456複製程式碼
2、建立證書
openssl req -new -key server.key -out server.csrEnter pass phrase for server.key:You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:GDLocality Name (eg, city) [Default City]:SZOrganization Name (eg, company) [Default Company Ltd]:DEMOOrganizational Unit Name (eg, section) []:DEMOCommon Name (eg, your name or your server's hostname) []:hub.czp.comEmail Address []:[email protected] enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:An optional company name []:複製程式碼
3、讓證書退去密碼
openssl rsa -in server.key.org -out server.keyEnter pass phrase for server.key.org:輸入密碼 123456writing RSA key複製程式碼
4、簽名
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt複製程式碼
5、修改證書許可權
chmod -R 777 /data/cert複製程式碼
安裝 harbor
./harbor/install.sh複製程式碼
配置本地 hosts
10.0.0.11 hub.czp.com複製程式碼
訪問 harbor
輸入 hub.czp.com, 輸入 admin/12345