vlambda博客
学习文章列表

k8s 助力资管云运维服务升级

宇宙弦(纯音乐) 进度条 00:00 / 01:20
k8s 助力资管云运维服务升级

       Kubernetes,又称为 k8s(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s)或者简称为 "kube" ,是一种可自动实施 Linux 容器操作的开源平台。它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,您可以将运行 Linux 容器的多组主机聚集在一起,由 Kubernetes 帮助您轻松高效地管理这些集群。而且,这些集群可跨公共云、私有云或混合云部署主机。因此,对于要求快速扩展的云原生应用而言(例如借助 Apache Kafka 进行的实时数据流处理),Kubernetes 是理想的托管平台。


Part1

为什么需要k8s?

k8s 助力资管云运维服务升级

      容器是打包和运行应用程序的好方式。在生产环境中,你需要管理运行应用程序的容器,并确保不会停机。例如,如果一个容器发生故障,则需要启动另一个容器。如果系统处理此行为,会不会更容易?

这就是 Kubernetes 来解决这些问题的方法!Kubernetes 为你提供了一个可弹性运行分布式系统的框架。Kubernetes 会满足你的扩展要求、故障转移、部署模式等。例如,Kubernetes 可以轻松管理系统的 Canary 部署。

Kubernetes 为你提供:

服务发现和负载均衡

存储编排

    Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

自动部署和回滚

      你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

自动完成装箱计算

    Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。

自我修复

       Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。

密钥与配置管理

      Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。


k8s 助力资管云运维服务升级


Part2

k8s安装-系统初始化

    k8s集群部署至少需要三台服务器

安装依赖包

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git unzip lrzsz


设置防火墙为 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 <<EOFnet.bridge.bridge-nf-call-iptables=1net.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=1net.netfilter.nf_conntrack_max=2310720EOF
cp kubernetes.conf /etc/sysctl.d/kubernetes.confsysctl -p /etc/sysctl.d/kubernetes.conf


调整系统时区

# 设置系统时区为 中国/上海timedatectl set-timezone Asia/Shanghai# 将当前的 UTC 时间写入硬件时钟timedatectl set-local-rtc 0# 重启依赖于系统时间的服务systemctl restart rsyslogsystemctl restart crond


关闭系统不需要服务

systemctl stop postfix && systemctl disable postfix


设置 rsyslogd 和 systemd journald

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# 日志保存时间 2MaxRetentionSec=2week# 不将日志转发到 syslogForwardToSyslog=noEOF
systemctl restart systemd-journald


k8s 助力资管云运维服务升级


Part3

k8s安装-部署

kube-proxy开启ipvs的前置条件

modprobe br_netfiltercat > /etc/sysconfig/modules/ipvs.modules <<EOF#!/bin/bashmodprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- nf_conntrack_ipv4EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules &&lsmod | grep -e ip_vs -e nf_conntrack_ipv4


安装 Docker 

详见:“docker助力资管敏捷业务开发”


安装 Kubeadm (主从配置)

cat <<EOF > /etc/yum.repos.d/kubernetes.repo[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.gpgEOF
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.yamllocalAPIEndpoint:advertiseAddress: 192.168.66.10kubernetesVersion: v1.15.1networking:podSubnet: "10.244.0.0/16"serviceSubnet: 10.96.0.0/12---apiVersion: kubeproxy.config.k8s.io/v1alpha1kind: KubeProxyConfigurationfeatureGates:SupportIPVSProxyMode: truemode: ipvs

kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs --ignore-preflight-errors=NumCPU | tee kubeadm-init.log # --ignore-preflight-errors=NumCPU(CPU小于4核心时添加)
#1.8版本以后kubeadm init --config=kubeadm-config.yaml --upload-certs --ignore-preflight-errors=NumCPU | tee kubeadm-init.log # --ignore-preflight-errors=NumCPU(CPU小于4核心时添加)
#安装成功后需要的额外操作Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config


部署网络

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#也可通过下载kubeflannel.yml文件wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl create -f kube-flannel.yml
# 查看是否部署成功kubectl get pod -n kube-system


加入其余工作节点

Then you can join any number of worker nodes by running the following on each as root:
# mater节点安装完成之后会出现如下日志,只需要在其节点中运行此命令就可以加入kubeadm join 192.168.137.101:6443 --token abcdef.0123456789abcdef \    --discovery-token-ca-cert-hash sha256:879da45e65ec62f415191bab981a12c39977f9a25d58cb1c9019c6f79379cb1e


k8s 助力资管云运维服务升级



k8s 助力资管云运维服务升级


k8s 助力资管云运维服务升级

中交金服

张贤贵

 投稿邮箱 

[email protected]

审核人

赵越

长按二维码