kubernetes环境搭建重要脚本(包括harbor搭建仓库脚本)

前言

最近因为工作需要,在调研kubernetes也就是K8s的环境搭建。查找了很多资料和视频,了解了K8s环境的搭建需要具备以下几个技能:
1、需要对Linux基础命令较熟悉;
2、需要对docker有一定的了解;
3、需要对计算机网络原理有一些了解;
4、需要了解kubernetes的原理、组件以及用途有较清楚的认识;

Kubernetes简单介绍

需要知道的大概的知识点,包括以下几个方面:
1、资源清单;
2、Pod控制器;
3、服务发现;
4、存储;
5、调度器;
6、安全;
7、HELM;
8、运维。

Kubernetes组件说明

需要知道如下几个组件到底是干什么用的:
1、api server;
2、Controller Manager;
3、Scheduler;
4、ETCD:键值对数据库,存储K8s集群所有重要信息;
5、kubelet:直接跟容器引擎交互,对容器生命周期进行管理;
6、kube-proxy:Iptables,Ipvs实现服务映射访问;
7、CoreDns:可为集群中的SVC创建一个域名Ip的对应关系解析;
8、Dashboard:B/S结构访问体系;
9、Ingress controller:官方支持四层代理,Ingress支持七层;
10、Fedetation;
11、Prometheus:K8s监控能力;
12、ELK:日志。

开始安装

以下是搭建一套一主二从集群环境所需要操作的重要脚本。

设置系统主机名以及host文件的相互解析

hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname 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
vm.overcommit_memory=1
vm.panic_on_oom=0
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

关闭系统不需要的服务

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
[Journal]
Storage=persistent
 Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000

SystemMaxUse=10G
SystemMaxFileSize=200M
MaxRetentionSec=2week
ForwardToSyslog=no
EOF

重启系统使用journald日志

systemctl restart systemd-journald

升级系统内核为4.44

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt
grub2-set-default 'CentOS Linux (4.4.223-1.el7.elrepo.x86_64) 7 (Core)'

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
mkdir /etc/docker
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
systemctl start 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

初始化主节点

kubeadm config print init-defaults > kubeadm-config.yaml
vi kubeadm-config.yaml

改ip
改kubernetes版本
添加

podSubnet: "10.244.0.0/16"

---
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

获取kube-flannel.yml 文件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

建立本地hub仓库

在docker的daemon.json 中添加证书相关配置
“insecure-registries”:[“https://hub.yourdomain.com”]
在hosts中追加域名配置
echo “192.168.1.134 hub.yourdomain.com” >> /etc/hosts

Harbor 安装: Harbor 官方地址: https://github.com/vmware/harbor/releases
1 、解压软件包: tar xvf harbor-offline-installer-.tgz
https://github.com/vmware/harbor/releases/download/v1.2.0/harbor-offline-installer-v1.2.0.tgz
2 、配置 harbor.cfg
a 、必选参数
hostname :目标的主机名或者完全限定域名,yourdomain
ui_url_protocol : http 或 https 。默认为 http
db_password :用于 db_auth 的 MySQL 数据库的根密码。更改此密码进行任何生产用途
max_job_workers :(默认值为 3 )作业服务中的复制工作人员的最大数量。对于每个映像复制作业,
工作人员将存储库的所有标签同步到远程目标。增加此数字允许系统中更多的并发复制作业。但是,由于每个工
作人员都会消耗一定数量的网络 / CPU / IO 资源,请根据主机的硬件资源,仔细选择该属性的值
customize_crt :( on 或 off 。默认为 on )当此属性打开时, prepare 脚本将为注册表的令牌的生成 / 验证创
建私钥和根证书
ssl_cert : SSL 证书的路径,仅当协议设置为 https 时才应用
ssl_cert_key : SSL 密钥的路径,仅当协议设置为 https 时才应用
secretkey_path :用于在复制策略中加密或解密远程注册表的密码的密钥路径
3 、创建 https 证书以及配置相关目录权限

mkdir /data/cert
openssl genrsa -des3 -out server.key 2048
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
chmod -R 777 /data/cert

4 、运行脚本进行安装

./install.sh

5 、访问测试
https://reg.yourdomain.com 的管理员门户(将 reg.yourdomain.com 更改为您的主机名 harbor.cfg )。请注意,默认管理员用户名 / 密码为 admin / Harbor12345

安装helm

下载helm

wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz

创建rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
        name: tiller
     namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
        name: tiller
roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: cluster-admin
subjects:
      - kind: ServiceAccount
        name: tiller
        namespace: kube-system

执行文件

kubectl create -f rbac.yaml

初始化helm服务

helm init --service-account tiller --skip-refresh

查看pod详情

kubectl describe pod tiller-deploy-58565b5464-jjzqs -n kube-system

查看helm版本

helm version

安装dashboard

docker加载镜像

docker load -i dashboard.tar

查看helm仓库

helm repo list

helm增加stable的镜像源

helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

更新helm仓库

helm repo update

helm获取dashboard

helm fetch stable/kubernetes-dashboard

新建kubernetes-dashboard.yaml文件

image:
repository: k8s.gcr.io/kubernetes-dashboard-amd64
tag: v1.10.1
ingress:
enabled: true
hosts:
    - k8s.frognew.com
annotations:
   nginx.ingress.kubernetes.io/ssl-redirect: "true"
   nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
tls:
  - secretName: frognew-com-tls-secret
    hosts:
    - k8s.frognew.com
rbac:
clusterAdminRole: true

通过helm安装dashboard

helm install . -n kubernetes-dashboard --namespace kube-system -f kubernetes-dashboard.yaml

删除名称空间为kube-system下的pod

kubectl delete pod kubernetes-dashboard-79599d7b8d-bnpp2 -n kube-system

编辑dashboard服务,type改为NodePort

kubectl edit svc kubernetes-dashboard -n kube-system

获取名称空间为kube-system下的pod信息

kubectl get pod -n kube-system -o wide

获取名称空间在kube-system下面的服务

kubectl get svc -n kube-system

查看token

kubectl -n kube-system get secret |grep kubernetes-dashboard-token
kubectl describe secret kubernetes-dashboard-token-llqjx -n kube-system

安装prometheus

在plugin目录下

mkdir prometheus
cd prometheus
git clone https://github.com/coreos/kube-prometheus.git

修改vi grafana-service.yaml
spec下一行添加type: NodePort
targetPort: web下一行添加nodePort: 30100

修改vi prometheus-service.yaml
spec下一行添加type: NodePort
targetPort: web下一行添加nodePort: 30200

修改vi alertmanager-service.yaml
spec下一行添加type: NodePort
targetPort: web下一行添加nodePort: 30300

导入镜像

查看所有命名空间下的pod信息

kubectl get pod -o wide --all-namespaces

说明:该文章为本人总结所得,如有雷同或者侵权请告知。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值