阿里雲Kubernetes實戰2
在系列的第一篇文章中,我已經介紹過如何在阿里雲基於kubeasz搭建K8S叢集,通過在K8S上部署gitlab並暴露至叢集外來演示服務部署與發現的流程。文章寫於4月,忙碌了小半年後,我才有時間把後續部分補齊。系列會分為三篇,本篇將繼續部署基礎設施,如jenkins、harbor、efk等,以便為第三篇專案實戰做好準備。
需要說明的是,阿里雲迭代的實在是太快了,2018年4月的時候,由於SLB不支援HTTP跳轉HTTPS,迫不得已使用了Ingress-Nginx來做跳轉控制。但在4月底的時候,SLB已經在部分地區如華北、國外節點支援HTTP跳轉HTTPS。到了5月更是全節點支援。這樣以來,又簡化了Ingress-Nginx的配置。
一、Jenkins
一般情況下,我們搭建一個Jenkins用於持續整合,那麼所有的Jobs都會在這一個Jenkins上進行build,如果Jobs數量較多,勢必會引起Jenkins資源不足導致各種問題出現。於是,對於專案較多的部門、公司使用Jenkins,需要搭建Jenkins叢集,也就是增加Jenkins Slave來協同工作。
但是增加Jenkins Slave又會引出新的問題,資源不能按需排程。Jobs少的時候資源閒置,而Jobs突然增多仍然會資源不足。我們希望能動態分配Jenkins Slave,即用即拿,用完即毀。這恰好符合K8S中Pod的特性。所以這裡,我們在K8S中搭建一個Jenkins叢集,並且是Jenkins Slave in Pod.
1.1 準備映象
我們需要準備兩個映象,一個是Jenkins Master,一個是Jenkins Slave:
Jenkins Master
可根據實際需求定製Dockerfile
FROM jenkins/jenkins:latest USER root # Set jessie source RUN cecho '' > /etc/apt/sources.list.d/jessie-backports.list \ && echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \&& echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \ && echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list # Update RUN apt-get update && apt-get install -y libltdl7 && apt-get clean # INSTALL KUBECTL RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl && \ chmod +x ./kubectl && \ mv ./kubectl /usr/local/bin/kubectl # Set time zone RUN rm -rf /etc/localtime && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo 'Asia/Shanghai' > /etc/timezone # Skip setup wizard、 TimeZone and CSP ENV JAVA_OPTS="-Djenkins.install.runSetupWizard=false -Duser.timezone=Asia/Shanghai -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';\""
Jenkins Salve
一般來說只需要安裝kubelet就可以了
FROM jenkinsci/jnlp-slave USER root # INSTALL KUBECTL RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl && \ chmod +x ./kubectl && \ mv ./kubectl /usr/local/bin/kubectl
生成映象後可以push到自己的映象倉庫中備用
1.2 部署Jenkins Master
為了部署Jenkins、Jenkins Slave和後續的Elastic Search,建議ECS的最小記憶體為8G
在K8S上部署Jenkins的yaml參考如下:
apiVersion v1 kind Namespace metadata name jenkins-ci --- apiVersion v1 kind ServiceAccount metadata name jenkins-ci namespace jenkins-ci --- apiVersion rbac.authorization.k8s.io/v1beta1 kind ClusterRoleBinding metadata name jenkins-ci roleRef apiGroup rbac.authorization.k8s.io kind ClusterRole name cluster-admin subjects kind ServiceAccount name jenkins-ci namespace jenkins-ci --- # 設定兩個pv,一個用於作為workspace,一個用於儲存ssh key apiVersion v1 kind PersistentVolume metadata name jenkins-home labels release jenkins-home namespace jenkins-ci spec # workspace 大小為10G capacity storage 10Gi accessModes ReadWriteMany persistentVolumeReclaimPolicy Retain # 使用阿里雲NAS,需要注意,必須先在NAS建立目錄 /jenkins/jenkins-home nfs path /jenkins/jenkins-home server xxxx.nas.aliyuncs.com --- apiVersion v1 kind PersistentVolume metadata name jenkins-ssh labels release jenkins-ssh namespace jenkins-ci spec # ssh key 只需要1M空間即可 capacity storage 1Mi accessModes ReadWriteMany persistentVolumeReclaimPolicy Retain # 不要忘了在NAS建立目錄 /jenkins/ssh nfs path /jenkins/ssh server xxxx.nas.aliyuncs.com --- apiVersion v1 kind PersistentVolumeClaim metadata name jenkins-home-claim namespace jenkins-ci spec accessModes ReadWriteMany resources requests storage 10Gi selector matchLabels release jenkins-home --- apiVersion v1 kind PersistentVolumeClaim metadata name jenkins-ssh-claim namespace jenkins-ci spec accessModes ReadWriteMany resources requests storage 1Mi selector matchLabels release jenkins-ssh --- apiVersion extensions/v1beta1 kind Deployment metadata name jenkins namespace jenkins-ci spec replicas1 template metadata labels name jenkins spec serviceAccount jenkins-ci containers name jenkins imagePullPolicy Always # 使用1.1小結建立的 Jenkins Master 映象 image xx.xx.xx/jenkins1.0.0 # 資源管理,詳見第二章 resources limits cpu1 memory 2Gi requests cpu0.5 memory 1Gi # 開放8080埠用於訪問,開放50000埠用於Jenkins Slave和Master的通訊 ports containerPort8080 containerPort50000 readinessProbe tcpSocket port8080 initialDelaySeconds40 periodSeconds20 securityContext privilegedtrue volumeMounts # 對映K8S Node的docker,也就是docker outside docker,這樣就不需要在Jenkins裡面安裝docker mountPath /var/run/docker.sock name docker-sock mountPath /usr/bin/docker name docker-bin mountPath /var/jenkins_home name jenkins-home mountPath /root/.ssh name jenkins-ssh volumes name docker-sock hostPath path /var/run/docker.sock name docker-bin hostPath path /opt/kube/bin/docker name jenkins-home persistentVolumeClaim claimName jenkins-home-claim name jenkins-ssh persistentVolumeClaim claimName jenkins-ssh-claim --- kind Service apiVersion v1 metadata name jenkins-service namespace jenkins-ci spec type NodePort selector name jenkins # 將Jenkins Master的50000埠作為NodePort對映到K8S的30001埠 ports name jenkins-agent port50000 targetPort50000 nodePort30001 name jenkins port8080 targetPort8080 --- apiVersion extensions/v1beta1 kind Ingress metadata name jenkins-ingress namespace jenkins-ci annotations nginx.ingress.kubernetes.io/proxy-body-size"0" spec rules # 設定Ingress-Nginx域名和埠 host xxx.xxx.com http paths path / backend serviceName jenkins-service servicePort8080
最後附一下SLB的配置
這樣就可以通過域名xxx.xxx.com訪問Jenkins,並且可以通過xxx.xxx.com:50000來連結叢集外的Slave。當然,叢集內的Slave直接通過serviceName-namespace:50000訪問就可以了
1.3 配置Jenkins Slave
以管理員進入Jenkins,安裝”Kubernetes”外掛,然後進入系統設定介面,”Add a new cloud” – “Kubernetes”,配置如下:
- Test Connection 測試看連線是否成功
- Images – Add Pod Template – Kubernetes Pod Template
- 注意設定Name為”jnlp-agent”,其他按需填寫,設定完成後進入Advanced
- 根據需要設定資源管理,也就是說限制Jenkins Slave in Pod所佔用的CPU和記憶體,詳見第二章
- 設定Volume,同樣採用docker outside docker,將K8S Node的docker為Jenkins Slave Pod所用;設定Jenkins Slave的工作目錄為NAS
- 設定最多允許多少個Jenkins Slave Pod 同時執行,然後進入Advanced
- 填寫Service Account,與部署Jenkins Master的yaml檔案中的Service Account保持一致;如果你的Jenkins Slave Image是私有映象,還需要設定ImagePullSecrets
- Apply並完成
1.4 測試驗證
我們可以寫一個FreeStyle Project的測試Job:
測試執行:
可以看到名為”jnlp-agent-xxxxx”的Jenkins Salve被建立,Job build完成後又消失,即為正確完成配置。
二、K8S資源管理
在第一章中,先後提到兩次資源管理,一次是Jenkins Master的yaml,一次是Kubernetes Pod Template給Jenkins Slave 配置。Resource的控制是K8S的基礎配置之一。但一般來說,用到最多的就是以下四個:
- Request CPU:意為某Node剩餘CPU大於Request CPU,才會將Pod建立到該Node上
- Limit CPU:意為該Pod最多能使用的CPU為Limit CPU
- Request Memory:意為某Node剩餘記憶體大於Request Memory,才會將Pod建立到該Node上
- Limit Memory:意為該Pod最多能使用的記憶體為Limit Memory
比如在我這個專案中,Gitlab至少需要配置Request Memory為3G,對於Elastic Search的Request Memory也至少為2.5 G.
其他服務需要根據K8S Dashboard中的監控外掛結合長時間執行後給出一個合理的Resource控制範圍。
三、Harbor
在K8S中跑CI,大致流程是Jenkins將Gitlab程式碼打包成Image,Push到Docker Registry中,隨後Jenkins通過yaml檔案部署應用,Pod的Image從Docker Registry中Pull.也就是說到目前為止,我們還缺一個Docker Registry才能準備好所有CI需要的基礎軟體。
利用阿里雲的映象倉庫或者Docker HUB可以節省硬體成本,但考慮資料安全、傳輸效率和操作易用性,還是希望自建一個Docker Registry. 可選的方案並不多,官方提供的輕量簡潔,vmware的功能更豐富。
Harbor提供了一個介面友好的UI,支援映象同步,這對於DevOps尤為重要。Harbor官方提供了Helm方式在K8S中部署。但我考慮Harbor佔用的資源較多,從節省硬體成本來說,把Harbor放到了K8S Master上(Master節點不會被排程用於部署Pod,所以大部分空間資源沒有被利用)。當然這不是一個最好的方案,但它是最適合我們目前業務場景的方案。
在Master節點使用docker compose部署Harbor的步驟如下:
- 192.168.0.1安裝docker-compose
pip install docker-compose
- 192.168.0.1 data目錄掛載NAS路徑(harbor的volume預設對映到宿主機的/data目錄,所以我們把宿主機的/data目錄掛載為NAS即可實現用NAS作為harbor的volume)
mkdir /data mount -t nfs -o vers=4.0 xxx.xxx.com:/harbor /data
-
- 根據需要下載指定版本的 Harbor offline installer
- 解壓後配置harbor.cfg
# 域名 hostname = xx.xx.com # 協議,這裡可以使用http可以免去配置ssl_cert,通過SLB暴露至叢集外再加上ssh即可 ui_url_protocol = http # 郵箱配置 email_identity = rfc2595 email_server = xx email_server_port = xx email_username = xx email_password = xx email_from = xx email_ssl = xx email_insecure = xx # admin賬號預設密碼 harbor_admin_password = xx
- 修改docker-compose.yaml中的埠對映,這裡將容器埠對映到宿主機的23280埠
proxy image vmware/nginx-photon v1.5.0 container_name nginx restart always volumes ./common/config/nginx:/etc/nginx:z networks harbor ports 23280:80 #- 443:443 #- 4443:4443 depends_on mysql registry ui log logging driver"syslog" options syslog-address"tcp://127.0.0.1:1514" tag"proxy"
- 執行install.sh
- 修改 kubeasz的 roles/docker/files/daemon.json加入”insecure-registries”節點,如下所示
{ "registry-mirrors": ["https://kuamavit.mirror.aliyuncs.com", "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn"], "insecure-registries": ["192.168.0.1:23280"], "max-concurrent-downloads": 10, "log-driver": "json-file", "log-level": "warn", "log-opts": { "max-size": "10m", "max-file": "3" } }
重新安裝kubeasz的docker
ansible-playbook 03.docker.yml
這樣在叢集內的任何一個節點就可以通過http協議192.168.0.1:23280 訪問harbor
- 開機啟動
vi /etc/rc.local # 加入如下內容 # mount -t nfs -o vers=4.0 xxxx.com:/harbor /data # cd /etc/ansible/heygears/harbor # sudo docker-compose up -d chmod +x /etc/rc.local
- 設定Secret(K8S部署應用時使用Secret拉取映象,詳見系列教程第三篇)在K8S叢集任意一臺機器使用命令
kubectl create secret docker-registry regcred --docker-server=192.168.0.1:23280 --docker-username=xxx --docker-password=xxx --docker-email=xxx
- 設定SLB(如果僅在內網使用,不設定SLB和DNS也可以)
- 登陸Harbor管理頁面
- 在叢集內通過
docker login 192.168.0.1:23280
驗證Harbor是否建立成功
四、EFK
最後我們來給叢集加上日誌系統。
專案中常用的日誌系統多數是Elastic家族的ELK,外加Redis或者Kafka作為緩衝佇列。由於Logstash需要執行在java環境下,且佔用空間大,配置相對複雜,隨著Elastic家族的產品逐漸豐富,Logstash開始慢慢偏向日誌解析、過濾、格式化等方面,所以並不太適合在容器環境下的日誌收集。K8S官方給出的方案是EFK,其中F指的是Fluentd,一個用Ruby寫的輕量級日誌收集工具。對比Logstash來說,支援的外掛少一些。
容器日誌的收集方式不外乎以下四種:
- 容器外收集。將宿主機的目錄掛載為容器的日誌目錄,然後在宿主機上收集。
- 容器內收集。在容器內執行一個後臺日誌收集服務。
- 單獨執行日誌容器。單獨執行一個容器提供共享日誌卷,在日誌容器中收集日誌。
- 網路收集。容器內應用將日誌直接傳送到日誌中心,比如java程式可以使用log4j2轉換日誌格式併發送到遠端。
- 通過修改docker的–log-driver。可以利用不同的driver把日誌輸出到不同地方,將log-driver設定為syslog、fluentd、splunk等日誌收集服務,然後傳送到遠端。
docker預設的driver是json-driver,容器輸出到控制檯的日誌,都會以 *-json.log 的命名方式儲存在 /var/lib/docker/containers/ 目錄下。所以EFK的日誌策略就是在每個Node部署一個Fluentd,讀取/var/lib/docker/containers/ 目錄下的所有日誌,傳輸到ES中。這樣做有兩個弊端,一方面不是所有的服務都會把log輸出到控制檯;另一方面不是所有的容器都需要收集日誌。我們更想定製化的去實現一個輕量級的日誌收集。所以綜合各個方案,還是採取了網上推薦的以FileBeat作為日誌收集的“EFK”架構方案。
FileBeat用Golang編寫,輸出為二進位制檔案,不存在依賴。佔用空間極小,吞吐率高。但它的功能相對單一,僅僅用來做日誌收集。所以對於有需要的業務場景,可以用FileBeat收集日誌,Logstash格式解析,ES儲存,Kibana展示。
使用FileBeat收集容器日誌的業務邏輯如下:
也就是說我們利用K8S的Pod的臨時目錄{}來實現Container的資料共享,舉個例子:
apiVersion extensions/v1beta1 kind Deployment metadata name test labels app test spec replicas2 strategy type Recreate template metadata labels app test spec containers image#appImage name app volumeMounts name log-volume mountPath /var/log/app/ #app log path image#filebeatImage name filebeat args "-c" "/etc/filebeat.yml" securityContext runAsUser0 volumeMounts name config mountPath /etc/filebeat.yml readOnlytrue subPath filebeat.yml name log-volume mountPath /var/log/container/ volumes name config configMap defaultMode0600 name filebeat-config name log-volume emptyDir #利用{}實現資料互動 imagePullSecrets name regcred --- apiVersion v1 kind ConfigMap metadata name filebeat-config namespace test labels app filebeat data filebeat.yml - filebeat.inputs type log enabledtrue paths #FileBeat讀取log的源 /var/log/container/*.log output.elasticsearch hosts"xx.xx.xx:9200" tags"test" #log tag
實現這種FileBeat作為日誌收集的“EFK”系統,只需要在K8S叢集中搭建好ES和Kibana即可,FileBeat是隨著應用一起建立,無需提前部署。搭建ES和Kibana的方式可參考K8S官方文件,我也進行了一個簡單整合:
ES:
# RBAC authn and authz apiVersion v1 kind ServiceAccount metadata name elasticsearch-logging namespace kube-system labels k8s-app elasticsearch-logging kubernetes.io/cluster-service"true" addonmanager.kubernetes.io/mode Reconcile --- kind ClusterRole apiVersion rbac.authorization.k8s.io/v1 metadata name elasticsearch-logging labels k8s-app elasticsearch-logging kubernetes.io/cluster-service"true" addonmanager.kubernetes.io/mode Reconcile rules apiGroups "" resources "services" "namespaces" "endpoints" verbs "get" --- kind ClusterRoleBinding apiVersion rbac.authorization.k8s.io/v1 metadata namespace kube-system name elasticsearch-logging labels k8s-app elasticsearch-logging kubernetes.io/cluster-service"true" addonmanager.kubernetes.io/mode Reconcile subjects kind ServiceAccount name elasticsearch-logging namespace kube-system apiGroup"" roleRef kind ClusterRole name elasticsearch-logging apiGroup"" --- apiVersion v1 kind PersistentVolume metadata name es-pv-0 labels release es-pv namespace kube-system spec capacity storage 20Gi accessModes ReadWriteMany volumeMode Filesystem相關推薦
阿里雲Kubernetes實戰2
您目前處於: 前言: 在系列的第一篇文章中,我已經介紹過如何在阿里雲基於kubeasz搭建K8S叢集,通過在K8S上部署gitlab並暴露至叢集外來演示服務部署與發現的流程。文章寫於4月,忙碌了小半年後,我才有時間把後續部分補齊。系列會分為三篇,本篇將繼續部署基礎設施,如j
阿里雲Kubernetes實戰2–搭建基礎服務
前言: 在系列的第一篇文章中,我已經介紹過如何在阿里雲基於kubeasz搭建K8S叢集,通過在K8S上部署gitlab並暴露至叢集外來演示服務部署與發現的流程。文章寫於4月,忙碌了小半年後,我才有時間把後續部分補齊。系列會分為三篇,本篇將繼續部署基礎設施,如jenkins、harbor、efk等,以便為第三
阿里雲Kubernetes實戰1
前言: 考慮到公司持續整合與docker容器技術實施已有一段時間,取得了不錯的效果,但對於裝置運維、系統隔離、裝置利用率和擴充套件性還有待提升,綜合目前比較成熟的微服務技術,打算把現有業務遷移到K8S叢集。 由於公司所有業務均部署在阿里雲上,最開始就調研了阿里雲自己提供的Kubernetes叢
阿里雲Kubernetes實戰3
前言: 在上一篇文章中,我們已經在K8S叢集部署了Jenkins、Harbor和EFK。作為本系列最後一篇文章,將通過實際案例串聯所有的基礎軟體服務,基於K8S做DevOps。 整體的業務流程如下圖所示: 一、一機多Jenkins Slave 由於業務需要,我們的自動化測試需要基於windo
阿里雲Kubernetes實戰1–叢集搭建與服務暴露
前言: 考慮到公司持續整合與docker容器技術實施已有一段時間,取得了不錯的效果,但對於裝置運維、系統隔離、裝置利用率和擴充套件性還有待提升,綜合目前比較成熟的微服務技術,打算把現有業務遷移到K8S叢集。 由於公司所有業務均部署在阿里雲上,最開始就調研了阿里雲自己提供的Kubernetes叢集,但後來還
Kubernetes實戰[2]: 服務發現機制與Cluster DNS的安裝(無CA認證版)
服務發現機制與Cluster DNS的安 服務發現機制Kubernetes提供了兩種發現Service的方法: 1.環境變量 當Pod運行的時候,Kubernetes會將之前存在的Service的信息通過環境變量寫到Pod中。 這種方法要求Pod必須要在Service之後啟動。
在阿里雲Kubernetes上使用ENI進行分散式機器學習訓練
概述 模型訓練是機器學習最主要的實踐場景,尤其以使用機器學習框架TensorFlow進行模型訓練最為流行,但是隨著機器學習的平臺由單機變成叢集,這個問題變得複雜了。利用KubeFlow社群的自定義資源TFJob/MPIJob/MxNetJob可以在Kubernetes叢集方便的執行其不同的分散式訓練框架,解
阿里雲環境實戰搭建CDN內容分發
1、建立CDN CNAME 指向CDN雲廠商地址 2、使用域名轉向到CDN雲廠商地址 請求過來 通過cnd 分發到不同的伺服器 如果有快取的話 直接走了 CDN也可以實現安全功能,比如CDN實現防止DDOS,DNS負載均衡,實現web安全防禦功能,比如黑名單和
阿里雲php-7.2.12 安裝
安裝依賴 yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel mysql pcre-devel
centos 7 yum 設定 阿里雲 kubernetes 庫
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x
阿里雲ChatOps實戰
課程介紹: ChatOps 的理念由 DevOps 延伸而來,又結合 AI(人工智慧)落地,可以說是人工智慧和新型工作理念結合的產物。它也是一種新型智慧工作方式,幫助團隊利用 ChatBot 機器人使成員和各項輔助工具連線在一起,以溝通驅動的方式完成工作,同時解決人與人
阿里雲 Debian 9.2 安裝 Java Web 環境
本來是用 CentOS 的,結果源裡的 Tomcat 有 bug 阿里雲相關配置 建立金鑰對,網路和安全 -> 金鑰對 -> 建立金鑰對,按提示建立即可 更換例項系統盤,換成 CentOS 7.4 64 位,設定使用金鑰登入而非密碼 ECS 例項放行 Tomcat 的 8080
阿里雲 Centos 7.2 環境配置 LNMP
首先更新系統軟體 $ yum update 安裝nginx 1.安裝nginx源 $ yum localinstall http://nginx.org/packages/centos/7/noarch/RPMS/n
阿里雲部署redis3.2.100叢集注意事項redis cluster
由於安裝時忘記截圖,只有文字描述了 三臺雲伺服器 兩臺windows 一臺linux 6個redis服務 3主3從 在安全組要開放埠:如6379,伺服器中也要將埠暴露出來 叢集對外的總端 埠+10000,如16379也要開放出來 bind的設定 bind 0.0.0
5分鐘在阿里雲Kubernetes服務上搭建jenkins環境並完成應用構建到部署的流水線作業
本文主要演示如何在阿里雲Kubernetes服務上快速搭建jenkins持續整合環境,並基於提供的示例應用快速完成應用原始碼編譯、映象構建和推送以及應用部署的流水線。 先決條件:阿里雲Kubernetes叢集。 一 快速開始 1. 部署jenkins 容器服務-Kubernetes -> 市場
阿里雲 Centos 7.2開啟ftp服務用到埠
記錄1 https://www.jianshu.com/p/bf772ffc0c95 阿里雲CentOS7搭建任何網路服務,需要配置相應的安全組規則。 開啟阿里雲端口許可權 阿里雲伺服器埠許可權是由安全組規則控制,所以配置FTP服務,需要開啟伺服器的20/21埠許可權。 由於需要F
阿里雲ECS CentOS 2.6版本核心升級至3.10
當前有部分應用對系統核心版本有一定的要求,比如Docker要求核心版本在3.10以上,雲伺服器中提供的Centos 7以下的阿里雲官方公共映象是2.6以下。雖然更換系統到Centos 7可以滿足要求,但是更換系統後對業務環境重新部署會消耗一定時間和人力成本,因此可以考慮針
再次升級!阿里雲Kubernetes日誌解決方案
背景針對K8S日誌採集存在的採集目標多、彈性伸縮難、運維成本大、侵入性高、採集效能低等問題,在18年2月份日誌服務和容器服務團隊一起釋出了阿里雲Kubernetes日誌解決方案。1分鐘內即可完成整個叢集部署,實現該節點上宿主機日誌、容器日誌、容器stdout等所有資料來源的一
阿里雲Centos 7.2 安裝apache踩的坑
./configure --prefix=/usr/local/apache2 Centos安裝 Apache2.4提示 APR not found的解決辦法: 1.下載所需軟體包: 具體步驟如下: 1、:解決apr not foun
阿里雲Kubernetes Service Mesh實踐進行時(1): Istio初體驗
摘要: 本篇文章是系列中的第一篇,主要講述利用阿里雲Kubernetes容器服務,快速搭建一套用於連線、管理以及安全化微服務的開放平臺Istio,為應用引入和配置多個相關服務。 概述 Istio是一個用於連線/管理以及安全化微服務的開放平臺,提供了一種簡單的方式用於建