We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
原文:Pattern: Service Mesh
服务网格(Service Mesh)最早是由开发 Linkerd 的 Buoyant 公司提出,并在内部使用。2016年9月29日第一次公开使用该术语。2017 年随着 Linkerd 的传入,Service Mesh 进入国内技术区。
服务网格是一个基础设施层 ,功能在于处理服务间通信,职责是负责实现请求的可靠传递。在实践中,服务网格通常实现为轻量级网络代理,通常与应用程序部署在一起,但是对应用透明。
在一个服务网格中,服务间的通信完全由 Sidecar(边车)代理完成,相互连接的 Sidecar 形成网状结构。
服务网格由 数据平面(Data Plane) 和 控制平面(Control Plane)组成。数据平面负责部署 Sidecar 的请求代理,控制平面主要负责请求代理之间的交互,以及用户与请求代理的交互。
Kubernetes 是 Google 2014 年创建管理的,是 Google 10 多年大规模容器管理技术 Borg 的开源版本。是容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。其目标是促进完善组件和工具的生态系统,以减轻应用程序在公有云或私有云中运行的负担。
hostnamectl set-hostname k8s-master # 将 k8s-master 和对应的 IP 地址 添加到 /etc/hosts
# 备份 yum 源配置 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup # 从 163 网站中下载系统对应的 yum 源配置,放置到 /etc/yum.repos.d/ 文件中 http://mirrors.163.com/.help/centos.html # 运行命令生成缓存 yum clean all && yum makecache # 安装依赖包 yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
# 关闭防火墙,并关闭其开机自启 systemctl stop firewalld && systemctl disable firewalld # 安装 iptables-services yum -y install iptables-services # 设置 iptables 为开机自启 systemctl start iptables && systemctl enable iptables # 清空 iptables 的规则,保存 iptables -F && service iptables save
Permission denied
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
--fail-swap-on
swapoff -a # 注释 /etc/fstab 对象的条目,防止开机自动挂载 swap 分区 sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 可以通过 free 命令验证
cat > /etc/sysctl.d/kubernetes.conf <<EOF net.bridge.bridge-nf-call-ip6tables=1 net.bridge.bridge-nf-call-iptables=1 net.ipv6.conf.all.disable_ipv6=1 EOF # 加载 br_netfilter 模块 modprobe br_netfilter # 手动刷新 sysctl -p /etc/sysctl.d/kubernetes.conf
## 同步 ntp服务器时间 ntpdate -u ntp1.aliyun.com # 设置定时任务同步时间 echo "*/20 * * * * /usr/sbin/ntpdate -u ntp.api.bz >/dev/null 2>&1" >> /var/spool/cron/root
systemctl stop postfix && systemctl disable postfix
# 持久化保存日志的目录 mkdir /var/log/journal mkdir /etc/systemd/journald.conf.d cat > /etc/systemd/journald.conf.d/99-prophet.conf << EOF [Jouranl] # 持久化保存到磁盘 Storage=persistent # 压缩历史日志 Compress=yes # 向磁盘刷写日志的时间间隔,默认五分钟 SyncIntervalSec=5m # 限制日志的生成速率 RateLimitIntervalSec=30s RateLimitBurst=10000 # 最大占用空间 SystemMaxUse=10G # 单日志文件最大体积 SystemMaxFileSize=200M # 日志保存时间 MaxRetentionSec=2week # 不将日志转发到 syslog ForwardToSyslog=no EOF systemctl restart systemd-journald
# 下载内核源 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.221-1.el7.elrepo.x86_64) 7 (Core)" # 重启系统使其生效 reboot # 通过 uname -r 验证
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum update -y && sudo yum install -y \ containerd.io-1.2.13 \ docker-ce-19.03.11 \ docker-ce-cli-19.03.11
mkdir -p /etc/docker cat <<EOF | sudo tee /etc/docker/daemon.json { "registry-mirrors":["https://registry.docker-cn.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF
sudo mkdir -p /etc/systemd/system/docker.service.d
systemctl daemon-reload systemctl start docker systemctl enable docker
# 加载 br_netfilter 模块 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 查看是否被引导 lsmod | grep -e ip_vs -e nf_conntrack_ipv4
kubeadm
kubelet
kubectl
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 install -y kubelet kubeadm kubectl --disableexcludes=kubernetes systemctl enable --now kubelet # 更改 kubelet 参数 sed -i 's/_ARGS=.*/&--cgroup-driver=systemd/g' /etc/sysconfig/kubelet # 重新启动 kubelet systemctl daemon-reload&&systemctl restart kubelet
kubeadm config print init-defaults > 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: # 修改为主节点 IP advertiseAddress: 192.168.249.160 bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock name: master-160 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: registry.aliyuncs.com/google_containers kind: ClusterConfiguration kubernetesVersion: v1.18.0 networking: dnsDomain: cluster.local # 配置成 Calico 的默认网段,如果使用 Flannel,则配置为 Flannel 的默认网段 podSubnet: 192.168.0.0/16 serviceSubnet: 10.96.0.0/12 scheduler: {} --- # 开启 IPVS 模式 apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration featureGates: SupportIPVSProxyMode: true mode: ipvs # 拉取镜像 kubeadm config images pull --config kubeadm-config.yml # 指定 kubeadm 初始化配置 kubeadm init --config=kubeadm-config.yml --upload-certs | tee kubeadm-init.log # init 如果出现 /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1 echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables # 在 1.20.x kube-proxy 启动失败,需要删除 configMap 中配置 featureGates: SupportIPVSProxyMode: true # 创建 Token kubeadm token create --print-join-command
# 安装 calico-operator 和 自定义资源配置 kubectl create -f https://kuboard.cn/install-script/v1.20.x/calico-operator.yaml kubectl create -f https://kuboard.cn/install-script/v1.20.x/calico-custom-resources.yaml # 允许 在master 节点部署应用 # kubectl taint nodes --all node-role.kubernetes.io/master- # 不允许 在 master 节点部署应用 kubectl patch node master节点名称 -p '{"spec":{"unschedulable":true}}' # 监听所有 pod 为 Running 状态 watch kubectl get pod -n kube-system -o wide # 验证,当 nodes 状态为 Ready 时则表示网络插件安装成功 kubectl get nodes -o wide
The text was updated successfully, but these errors were encountered:
No branches or pull requests
一、 服务网格(Service Mesh)
原文:Pattern: Service Mesh
服务网格(Service Mesh)最早是由开发 Linkerd 的 Buoyant 公司提出,并在内部使用。2016年9月29日第一次公开使用该术语。2017 年随着 Linkerd 的传入,Service Mesh 进入国内技术区。
1.1 目前微服务架构的痛点
1.2 什么是 Service Mesh
服务网格是一个基础设施层 ,功能在于处理服务间通信,职责是负责实现请求的可靠传递。在实践中,服务网格通常实现为轻量级网络代理,通常与应用程序部署在一起,但是对应用透明。
在一个服务网格中,服务间的通信完全由 Sidecar(边车)代理完成,相互连接的 Sidecar 形成网状结构。
服务网格由 数据平面(Data Plane) 和 控制平面(Control Plane)组成。数据平面负责部署 Sidecar 的请求代理,控制平面主要负责请求代理之间的交互,以及用户与请求代理的交互。
二、Kubernetes
Kubernetes 是 Google 2014 年创建管理的,是 Google 10 多年大规模容器管理技术 Borg 的开源版本。是容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。其目标是促进完善组件和工具的生态系统,以减轻应用程序在公有云或私有云中运行的负担。
2.1 Kubernetes 集群部署
系统配置
hostnamectl set-hostname k8s-master # 将 k8s-master 和对应的 IP 地址 添加到 /etc/hosts
Permission denied
--fail-swap-on
来忽略 swap on)systemctl stop postfix && systemctl disable postfix
Docker 安装
sudo yum update -y && sudo yum install -y \ containerd.io-1.2.13 \ docker-ce-19.03.11 \ docker-ce-cli-19.03.11
systemctl daemon-reload systemctl start docker systemctl enable docker
使用 Kubeadm 部署 Kubernetes 集群
kubeadm
、kubelet
、kubectl
The text was updated successfully, but these errors were encountered: