提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、环境准备说明
*本试验是实现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
EOFyum -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) 搭建完成。