- 項目摘要:
本內容是一個主節點,兩個從節點的k8s環境。非高可用環境。是一個簡易的入門案例。
前期準備:需要三臺centos服務器,本文是基於centos7。如果安裝Harbor,需要四臺centos服務器。
本文檔內容龐雜,可能會有少部分不全或者不正確,但是都是可以通過百度修正的。同時,後期也會不斷的修正。
- 項目具體實施:
- 前期準備(每臺機器都需要執行)
- 配置host文件
192.168.1.1 k8s-master
192.168.1.2 k8s-node01
192.168.1.3 k8s-node02
- 安裝環境
安裝依賴包
#yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
設置防火牆爲IPtables並設置空規則
#systemctl stop firewalld && systemctl disable firewalld
# yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save
關閉selinux
# swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/ ' /etc/selinux/config
# 調整內核參數,對於k8s [這裏報錯不用管它]
cat > kubernetes.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 #禁止使用 swap空間,只有當系統00M時才允許使用它
vm.overcommit_memory=1 #不檢查物理內存是否夠用
vm.panic_on_oom=0 #開啓00M
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max= 2310720
EOF
# cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
# sysctl -p /etc/sysctl.d/kubernetes.conf
同步時間
# ntpdate -u cn.pool.ntp.org
關閉不需要的服務
# systemctl stop postfix && systemctl disable postfix
設置rsyslogd和systemd journald
# mkdir /var/log/journal #持久化保存日誌的目錄
# mkdir /etc/systemd/journald.conf.d
# cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journa1l]
#持久化保存到磁盤
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
升級系統內核爲4.44
# rpm -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
# uname -r
- 搭建k8s(每臺機器都需要執行,除3部分內容)
- kube-proxy 開啓ipvs的前置條件。
modprobe br_netfilter
#cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules &&
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
- 安裝Docker軟件,每臺機器都執行。
# 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 update -y && yum install -y docker-ce
創建/etc/docker 目錄
#mkdir /etc/docker
配置daemon
# cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver":"json-file",
"log-opts":{
"max-size": "100m"
}
}
EOF
# mkdir -p /etc/systemd/system/docker.service.d
重啓docker服務
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
(或者按如下教程: 安裝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/yumdoc/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
初始化主節點(在主節點機器操作)
#kubeadm config print init-defaults > kubeadm-config.yaml
對照修改如下內容
localAPIEndpoint:
advertiseAddress: 【主節點ip地址】
kubernetesVersion: v1.15.1
networking:
podSubnet: "10.244.0.0/16"
serviceSubnet: 10.96.0.0/12
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates :
SupportIPVSProxyMode: true
mode : ipvs
# kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
隨後執行日誌中要求的命令,並且加入主節點以及其餘工作節點
部署網絡:
# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# kubectl create -f kube-flannel.yml
或者
#kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# kubectl get pod -n kube-system
- 至此,環境搭建完成。
- 附:安裝Harbor私有倉庫 (之後springboot將直接製作鏡像到該服務器)
機器: 192.168.1.4
- 安裝docker(略)
- 安裝docker-componse
# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# docker-compose --version
docker-compose version 1.24.1, build 1110ad01
- 製作證書(以下示例ip全改成自己的)
在嘗試http的時候,會遇到讓配置--insecure-registry serverIP,但是總是報錯,所以這裏直接採用證書的方式,通過https訪問。
創建目錄存放位置
# mkdir /root/ca -p
# cd /root/ca
以下命令創建CA證書
# openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
其中:(req:申請證書籤署請求;-newkey 新密鑰 ;-x509:可以用來顯示證書的內容,轉換其格式,給CSR簽名等X.509證書的管理工作,這裏用來自簽名。)
一路回車出現Common Name 輸入IP或域名,示例:
Common Name (eg, your name or your server's hostname) []:192.168.1.4
生成證書籤名請求
# openssl req -newkey rsa:4096 -nodes -sha256 -keyout 192.168.1.4.key -out 192.168.1.4.csr
一路回車出現Common Name 輸入IP或域名,示例:
Common Name (eg, your name or your server's hostname) []:192.168.1.4
生成證書
備註:若需要添加多個地址(允許鏈接的ip等)
# echo subjectAltName = IP:192.168.1.4 > extfile.cnf
# openssl x509 -req -days 365 -in 192.168.1.4.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out 192.168.1.4.crt
- 安裝Harbor
# cd /usr/local
下載離線安裝包
# wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.0.tgz
解壓文件
# tar xvf harbor-offline-installer-v1.8.0.tgz
進入Harbor目錄
# cd harbor
配置harbor.yml
# vim harbor.yml
配置如下
hostname: 192.168.1.4
https:
port: 443
certificate: /root/ca/192.168.1.4.crt
private_key: /root/ca/192.168.1.4.key
harbor_admin_password: 123456
data_volume: /usr/local/harbor/data
location: /var/log/harbor
- 運行腳本進行安裝
# ./install.sh
- 訪問測試
瀏覽器輸入:https://192.168.1.4,用戶名: admin 密碼:123456
- 配置當前主機docker的daemon.json文件
指定鏡像倉庫地址
# vim /etc/docker/daemon.json
添加如下內容:
#vim /etc/docker/daemon.json
{
"insecure-registries": ["https://192.168.1.4"]
}
- 在當前主機嘗試docker登錄
docker login 192.168.1.4
用戶名: admin 密碼:123456
- 上傳鏡像進行上傳測試
a、下載測試鏡像
#docker pull hello-world
b、給鏡像重新打標籤(它需要去前端查看生成規則,否則會push失敗)
#docker tag hello-world:latest 192.168.1.4/library/hello-world:v1
d、登錄docker服務器
#docker login 192.168.1.4
f、上傳鏡像
docker push 192.168.1.4/library/hello-world:v1
- 其它 Docker客戶端下載測試
a、指定鏡像倉庫地址
# vim /etc/docker/daemon.json
{
"insecure-registries": ["https://192.168.1.4"]
}
b、下載測試鏡像
# docker pull 192.168.1.4/library/hello-world:v1
- 添加CA證書實現免密登錄(在客戶機或者當前主機都可以)
# mkdir -p /etc/docker/certs.d/192.168.1.4
# cp ca.crt /etc/docker/certs.d/192.168.1.4/ca.crt
# systemc restart docker.service
相關材料下載(本材料包含和本頁內容一致的文檔、三份k8s講義,一套kubernetes培訓文檔,共大約20個文檔):
https://download.csdn.net/download/qq_25337221/12499378
- 參考鏈接:
- 參閱培訓教程
- 安裝harbor: https://learnku.com/articles/29884
- 配置CA證書: https://www.cnblogs.com/Dev0ps/p/10566398.html
本內容由安康學院“雨季”原創。