https://dcos.io/releases/ https://downloads.dcos.io/dcos/stable/1.12.0/dcos_generate_config.sh https://docs.mesosphere.com/1.12/installing/production/ Nodes 要求: Proxy/Bootstrap:用於安裝集羣的機器。必須安裝Docker(CentOS系統要用RedHat分支的1.13版本) Master node:建議3或者5個,開發測試可用1個。4 cores 處理器,32GB RAM,120GB 硬盤。 建議SSD硬盤掛載/var/lib/dcos。 /var/lib/dcos/mesos/master 日誌目錄 /var/lib/dcos/cockroach (企業版)CockroachDB /var/lib/dcos/navstar Mnesia數據庫 /var/lib/dcos/secrets (企業版)secrets保險箱 /var/lib/dcos/exhibitor Zookeeper數據庫 Agent node (public):建議6個以上,1個也能夠。2 cores 處理器,16GB RAM,60GB 硬盤。 /var 至少20GB 硬盤,能夠訪問外網或者內部的 Docker 倉庫。 必須關閉 firewalld,禁用 DNSmasq 釋放 53 端口。 /var/lib/mesos Master和Agent節點持久存儲在這個目錄,不要遠程掛載!<<<-- /var/lib/mesos/slave/slaves 任務的沙盒目錄 /var/lib/mesos/slave/volumes 框架使用的 ROOT 持久卷 /var/lib/mesos/docker/store 存儲 docker 鏡像層,用於提供 URC 容器 /var/lib/docker 存儲 docker 鏡像層,用於提供 docker 容器,不要遠程掛載!<<<-- Agent node (private):同上,只是 private agent node,能夠有更多個。 後面的安裝步驟假設有上面描述的 4個節點 安裝 dcos 集羣。 <<<--- 其餘要求:(將在後面的安裝步驟中設置) 所有節點啓用 SSH (Secure shell) 所有節點啓用 ICMP (Internet Control Message Protocol) (企業版)所有hostnames可以被 DNS 解析 每一個節點經過 bootstrap 節點訪問網絡 每一個節點經過 IP 鏈接本身和集羣其餘節點 (企業版)全部端口都應打開,以進行從管理節點到代理節點的來回通訊 UDP 必須打開才能進入管理節點上的端口 53。爲鏈接到集羣,Mesos 代理節點服務 (dcos-mesos-slave) 使用此端口查找 leader.mesos 建議爲 DC/OS 安裝使用高速互聯網鏈接。DC/OS 服務須要每秒至少 10 MBit。若是工件下載時間超過文件 /opt/mesosphere/etc/mesos-slave-common 中 MESOS_EXECUTOR_REGISTRATION_TIMEOUT 的值,某些 DC/OS 服務的安裝將失敗。MESOS_EXECUTOR_REGISTRATION_TIMEOUT 的默認值爲 10 分鐘。 安裝步驟: 系統:CentOS 7.4 語言:en_US.utf-8 文件系統: xfs with d_type 檢查目錄是否有ftype=1: # xfs_info /var/lib | grep -C 10 ftype=1 檢查整個文件系統: # df -Th 格式化新分區:# mkfs.xfs -n ftype=1 -f /dev/mesos/dcos 可使用符號連接將/var/lib下的docker、mesos、dcos,可嘗試以下方法: # mkdir -p /export/mesos # mount /dev/mesos/dcos /export/mesos mkdir -p /export/mesos/{docker,mesos,dcos,registry} systemctl stop docker rm -rf /var/lib/{docker,mesos,docs,registry} ln -s /export/mesos/docker /var/lib/docker ln -s /export/mesos/mesos /var/lib/mesos ln -s /export/mesos/dcos /var/lib/dcos ln -s /export/mesos/registry /var/lib/registry ls -l /var/lib/{docker,mesos,dcos,registry} systemctl start docker && docker info | grep d_type 全程聯網,須要 root 權限 注意:下面涉及到ssh -t命令的,請分別運行,不要一塊粘貼到遠程終端上。 若是安裝失敗,請跳到最後面的「4. 卸載 dcos」,而後從新安裝。 1. 準備,在 bootstrap 節點配置SSH,而後遠程關閉SELinux、Firewalld等服務,安裝Docker等 1.1 配置SSH 假設不知道 root 帳戶密碼,但能夠 sudo 得到 root 權限, 能夠在普通帳戶建立 ssh key 後複製到 root 目錄,步驟以下: $ ssh-keygen -t rsa // 生成密鑰對,一路回車 $ ssh-copy-id master // 複製本地公鑰到 master 節點此用戶的 authorized_keys 文件,須要輸入帳戶密碼 $ ssh-copy-id agent1 // 同上,複製到 agent1 節點,假設此節點是 public agent $ ssh-copy-id agent2 // 同上,複製到 agent2 節點,假設此節點是 private agent // 複製 ssh 給 root;禁用 sudo 密碼提示。方便後面遠程鏈接 root,須要輸入帳戶密碼 $ sudo mkdir -p /root/.ssh && sudo chmod 700 /root/.ssh && sudo cp ~/.ssh/* /root/.ssh/; echo '%wheel ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers $ ssh -t master "sudo mkdir -p /root/.ssh && sudo chmod 700 /root/.ssh && sudo cp ~/.ssh/* /root/.ssh/; echo '%wheel ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers" $ ssh -t agent1 "sudo mkdir -p /root/.ssh && sudo chmod 700 /root/.ssh && sudo cp ~/.ssh/* /root/.ssh/; echo '%wheel ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers" $ ssh -t agent2 "sudo mkdir -p /root/.ssh && sudo chmod 700 /root/.ssh && sudo cp ~/.ssh/* /root/.ssh/; echo '%wheel ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers" $ sudo su // 切換到 root # // 下面的操做均在 root 下執行,所以不寫 # 提示符了,也不加行尾註釋,方便複製 1.2 配置SELinux和firewalld等 // 先查看 SELinux 狀態,若是是 enabled 狀態,再進行關閉操做,而且重啓 sestatus // 若是須要,sed 替換命令,能夠設置替換爲 permissive(centOS 不可設置爲啓用) setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && reboot ssh -t master "setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && reboot" ssh -t agent1 "setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && reboot" ssh -t agent2 "setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && reboot" // 建立 nogroup 和 docker 組 groupadd nogroup && groupadd docker // 關閉 firewalld(centOS 必須關閉 firewalld),關閉 dnsmasq(釋放 53 端口,centos最小安裝無此服務) systemctl stop firewalld && sudo systemctl disable firewalld systemctl stop dnsmasq && sudo systemctl disable dnsmasq.service ssh -t master "groupadd nogroup && groupadd docker" ssh -t agent1 "groupadd nogroup && groupadd docker" ssh -t agent2 "groupadd nogroup && groupadd docker" ssh -t master "systemctl stop firewalld && sudo systemctl disable firewalld; systemctl stop dnsmasq && sudo systemctl disable dnsmasq.service" ssh -t agent1 "systemctl stop firewalld && sudo systemctl disable firewalld; systemctl stop dnsmasq && sudo systemctl disable dnsmasq.service" ssh -t agent2 "systemctl stop firewalld && sudo systemctl disable firewalld; systemctl stop dnsmasq && sudo systemctl disable dnsmasq.service" 1.3 安裝 Docker 卸載新版本的 docker-ce(若是存在),安裝 Redhat fork docker 1.13,啓動,啓用,查看版本 建議分別運行,以便查看是否安裝正確。 若是使用國內的centos安裝源,請參考:https://mirrors.tuna.tsinghua.edu.cn/help/centos/ yum remove -y docker-ce && yum install -y docker && systemctl start docker && systemctl enable docker && docker version ssh -t master "yum remove -y docker-ce && yum install -y docker && systemctl start docker && systemctl enable docker && docker version" ssh -t agent1 "yum remove -y docker-ce && yum install -y docker && systemctl start docker && systemctl enable docker && docker version" ssh -t agent2 "yum remove -y docker-ce && yum install -y docker && systemctl start docker && systemctl enable docker && docker version" 若是發現錯誤,請檢查是否有文件衝突提示,加入到 yum remove 命令中。 配置Docker倉庫鏡像(國內,會覆蓋daemon.json) echo '{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version ssh -t master "echo '{\"registry-mirrors\": [\"https://docker.mirrors.ustc.edu.cn/\"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version" ssh -t agent1 "echo '{\"registry-mirrors\": [\"https://docker.mirrors.ustc.edu.cn/\"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version" ssh -t agent2 "echo '{\"registry-mirrors\": [\"https://docker.mirrors.ustc.edu.cn/\"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version" 1.4 安裝其餘必要組件 yum install -y tar xz unzip curl ipset net-tools ntp ssh -t master "yum install -y tar xz unzip curl ipset net-tools ntp" ssh -t agent1 "yum install -y tar xz unzip curl ipset net-tools ntp" ssh -t agent2 "yum install -y tar xz unzip curl ipset net-tools ntp" 1.5 啓用 NTP(網絡時間協議) ntptime; adjtimex -p; timedatectl ssh -t master "ntptime; adjtimex -p; timedatectl" ssh -t agent1 "ntptime; adjtimex -p; timedatectl" ssh -t agent2 "ntptime; adjtimex -p; timedatectl" 1.6 下載 dcos 安裝腳本(900MB左右) cd /root curl -O https://downloads.dcos.io/dcos/stable/dcos_generate_config.sh // curl -O https://downloads.dcos.io/dcos/stable/1.12.0/dcos_generate_config.sh chmod +x dcos_generate_config.sh 2. 建立配置文件 配置文件結構: dcos_generate_config.sh genconf/ genconf/config.yaml genconf/ip-detect genconf/ssh_keys 2.1 建立 genconf 目錄,複製 ssh key,建立 ip-detect 文件 mkdir -p genconf cd genconf cp /root/.ssh/id_rsa ssh-key chmod 600 ssh-key vi ip-detect 文件內容: #!/usr/bin/env bash # AWS: # curl -fsSL http://169.254.169.254/latest/meta-data/local-ipv4 # GCE: # curl -fsSl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/ip set -o nounset -o errexit echo $(ip addr|grep 192.168|grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1) 文件結束 請將文件中 192.168 替換爲本機的 ip 地址的前兩組數字。 chmod +x ip-detect ./ip-detect 查看是否顯示爲本機 ip 2.2 建立 config.yaml。參見:https://docs.mesosphere.com/1.12/installing/production/advanced-configuration/configuration-reference/#configuration-parameters vi config.yaml 文件內容: bootstrap_url: http://<bootstrap_ip>:80 ip_detect_public_filename: genconf/ip-detect master_list: - <master-private-ip-1> # - <master-private-ip-2> # - <master-private-ip-3> public_agent_list: - <public-agent-private-ip> agent_list: - <private-agent-private-ip-1> # - <private-agent-private-ip-2> cluster_name: DCOS exhibitor_storage_backend: static master_discovery: static resolvers: - 8.8.4.4 - 8.8.8.8 ssh_key_path: /genconf/ssh-key ssh_port: 22 ssh_user: root use_proxy: 'false' # http_proxy: http://<user>:<pass>@<proxy_host>:<http_proxy_port> # https_proxy: http://<user>:<pass>@<proxy_host>:<http_proxy_port> # no_proxy: # - '.mesos' # - '.thisdcos.directory' # - '.dcos.directory' # - '.zk' # - '127.0.0.1' # - 'localhost' enable_ipv6: 'false' telemetry_enabled: 'false' oauth_enabled: 'false' 文件結束 文件的最後兩行是關閉dcos體驗反饋和oauth登陸,社區版建議關閉。 resolvers最多能夠3個,如需解析內網主機名,要指定內網的 DNS。 若是指定代理,請同時配置 Docker 代理,見後面「2.4 配置 Docker 代理」 企業版可指定superuser_username和superuser_password_hash,密碼經過 bash dcos_generate_config.ee.sh --hash-password <superuser_password> 或者--set-superuser-password生成到config.yaml 2.3 返回 dcos_generate_config.sh 路徑,準備安裝 cd .. 2.4 配置 Docker 代理(可選) mkdir -p /etc/systemd/system/docker.service.d vi /etc/systemd/system/docker.service.d/http-proxy.conf 文件開始 [Service] Environment="HTTP_PROXY=http://proxy.example.com:80/" "HTTPS_PROXY=https://proxy.example.com:443/" "NO_PROXY=.mesos,.thisdcos.directory,.dcos.directory,.zk,127.0.0.1,localhost" 文件結束 systemctl daemon-reload && systemctl restart docker 驗證代理是否被加載: systemctl show --property=Environment docker 3. 安裝 dcos 3.1 安裝 dcos bash dcos_generate_config.sh docker rm -f nginx docker run -d -p 80:80 -v $PWD/genconf/serve:/usr/share/nginx/html:ro --restart=always --name nginx nginx // 安裝 master 節點 ssh master mkdir /tmp/dcos; cd /tmp/dcos curl -O http://<bootstrap-ip>/dcos_install.sh bash dcos_install.sh master exit // 安裝 agent1(public agent)節點 ssh agent1 mkdir /tmp/dcos; cd /tmp/dcos curl -O http://<bootstrap-ip>/dcos_install.sh bash dcos_install.sh slave_public exit // 安裝 agent2(private agent)節點 ssh agent2 mkdir /tmp/dcos; cd /tmp/dcos curl -O http://<bootstrap-ip>/dcos_install.sh bash dcos_install.sh slave exit 若是安裝成功 監視 Exhibitor 頁面:顯示master節點的zookeeper的狀態,主節點融合大約須要 10 分鐘 http://<master-public-ip>:8181/exhibitor/v1/ui/index.html DCOS主頁: http://<public-master-ip>/ 3.2 配置代理(可選) 注意:下面的proxy.env是連接文件,不要用文件複製命令替換,請用vi手動修改。 若是dcos須要代理訪問,只在前面的方式配置config.yaml和配置docker代理是不夠的, 還須要在每一個節點修改proxy.env。 檢查是否代理配置成功的方法之一是:訪問dcos界面的Catalog頁面,默認它會去官網的Universe中得到組件列表。 配置master節點代理 ssh master vi /opt/mesosphere/etc/proxy.env 文件開始 http_proxy=http://<user>:<pass>@<proxy_host>:<http_proxy_port> https_proxy=https://<user>:<pass>@<proxy_host>:<https_proxy_port> no_proxy=".mesos,.thisdcos.directory,.dcos.directory,.zk,127.0.0.1,localhost" 文件結束 systemctl restart dcos-cosmos systemctl restart dcos-adminrouter.service 配置public agent節點代理 ssh agent1 vi /opt/mesosphere/etc/proxy.env 文件開始 http_proxy=http://<user>:<pass>@<proxy_host>:<http_proxy_port> https_proxy=https://<user>:<pass>@<proxy_host>:<https_proxy_port> no_proxy=".mesos,.thisdcos.directory,.dcos.directory,.zk,127.0.0.1,localhost" 文件結束 systemctl restart dcos-mesos-slave-public 配置private agent節點代理 ssh agent1 vi /opt/mesosphere/etc/proxy.env 文件開始 http_proxy=http://<user>:<pass>@<proxy_host>:<http_proxy_port> https_proxy=https://<user>:<pass>@<proxy_host>:<https_proxy_port> no_proxy=".mesos,.thisdcos.directory,.dcos.directory,.zk,127.0.0.1,localhost" 文件結束 systemctl restart dcos-mesos-slave 3.3 安裝 dcos cli(可選) dcos cli 能夠安裝到任何機器或者節點,而且有 windows、macOS和linux不一樣的版本。下面假設安裝到了 bootstrap 節點。 在 DCOS 頁面裏能夠經過左上角的下拉菜單安裝,也能夠手動安裝,注意地址的版本號: curl -O https://downloads.dcos.io/binaries/cli/linux/x86-64/dcos-1.12/dcos mv dcos /usr/local/bin chmod +x dcos /usr/local/bin/dcos 注意:/usr/local/bin 路徑下的程序,默認不會加入 root 帳戶的 PATH 變量,建議返回普通用戶使用 dcos 命令。 使用前設置集羣地址 dcos cluster setup https://<master-IP> dcos 3.4 安裝私有 Universe(可選) 在不鏈接外網使用 Universe 的方法 mkdir -p ~/universe && cd ~/universe curl -v https://downloads.mesosphere.com/universe/public/local-universe.tar.gz -o local-universe.tar.gz curl -v https://raw.githubusercontent.com/mesosphere/universe/version-3.x/docker/local-universe/dcos-local-universe-http.service -o dcos-local-universe-http.service curl -v https://raw.githubusercontent.com/mesosphere/universe/version-3.x/docker/local-universe/dcos-local-universe-registry.service -o dcos-local-universe-registry.service cd .. scp -r universe <master-IP>:~ ssh -A <master-IP> cd universe mv dcos-local-universe-registry.service /etc/systemd/system/ mv dcos-local-universe-http.service /etc/systemd/system/ docker load < local-universe.tar.gz systemctl daemon-reload systemctl enable dcos-local-universe-http systemctl enable dcos-local-universe-registry systemctl start dcos-local-universe-http systemctl start dcos-local-universe-registry 驗證服務是否成功 systemctl status dcos-local-universe-http systemctl status dcos-local-universe-registry 若是有多個 Master 節點,那麼都須要安裝上面方法安裝。 說明:本小節的例子中,將 master.mesos 替換爲每一個真正的 Master 節點名, 若 dcos 命令的操做系統不識別節點名,可配置 hosts(/etc/hosts) 技巧:得到主機的IP的方法,假設主機名爲master.mesos host master.mesos host後面也能夠用ip得到主機名。 用 dcos 命令添加私有 Universe,若是有多個 Master 節點,須要所有加入 dcos package repo remove Universe dcos package repo add local-universe http://master.mesos:8082/repo 注:從新添加官網 Universe(也可在 dcos 頁面的 Settings/Package Repositories 裏添加) dcos package repo add Universe https://universe.mesosphere.com/repo 爲每一個 Master 節點配置 Docker 信任證書: 建立 Docker 證書 dcos node ssh --master-proxy --mesos-id=<mesos-id> sudo mkdir -p /etc/docker/certs.d/master.mesos:5000 sudo curl -o /etc/docker/certs.d/master.mesos:5000/ca.crt http://master.mesos:8082/certs/domain.crt sudo systemctl restart docker 添加到信任(openssl那行會建立<hash_number>) sudo cp /etc/docker/certs.d/master.mesos:5000/ca.crt /var/lib/dcos/pki/tls/certs/docker-registry-ca.crt cd /var/lib/dcos/pki/tls/certs/ openssl x509 -hash -noout -in docker-registry-ca.crt sudo ln -s /var/lib/dcos/pki/tls/certs/docker-registry-ca.crt /var/lib/dcos/pki/tls/certs/<hash_number>.0 exit 完成後,DCOS的Catalog頁會顯示信任的包。 能夠手動建立一個可選的 Universe, 參見:https://docs.mesosphere.com/1.12/administering-clusters/deploying-a-local-dcos-universe/#selected-packages 例子:須要一個安裝了docker,請可以make,而且能鏈接網絡的linux機器 $ git clone https://github.com/mesosphere/universe.git --branch version-3.x $ cd universe/docker/local-universe/ // 編譯 universe-base 鏡像 $ sudo make base // 編譯 1.12 版本的自定義 local-universe 鏡像,最終會生成 local-universe.tar.gz $ sudo make DCOS_VERSION=1.12 DCOS_PACKAGE_INCLUDE="cassandra:1.0.25-3.0.10,marathon:1.4.2" local-universe $ sudo chmod 777 local-universe.tar.gz 3.5 私有 Docker Registry(可選) 除了使用 Docker hub,還可使用私有的 Docker Registry,有下面兩種狀況。 3.5.1 安裝 Universe 中的 Registry 參考:https://github.com/dcos/examples/tree/master/registry 內部的 Registry 服務虛擬地址默認是:registry.marathon.l4lb.thisdcos.directory:5000 方法一:使用自簽名證書配置 Docker Registry 應該使用第三方機構(如 Let's Encrypt)建立受權證書,下面的例子是如何使用自簽名證書。 注意:建立的證書必須安裝到每一個須要訪問 Docker Registry 的節點。 (1) 建立證書 在 bootstrap 節點 cd ~/genconf/serve openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 365 -out domain.crt ------ Country Name (2 letter code) [XX]:US State or Province Name (full name) []:NY Locality Name (eg, city) [Default City]:NYC Organization Name (eg, company) [Default Company Ltd]:mycompany Organizational Unit Name (eg, section) []:myorg Common Name (eg, your name or your servers hostname) []:registry.marathon.l4lb.thisdcos.directory Email Address []:myemailaddress@mesosphere.com ------ 查看生成的 domain.crt (將做爲registry-certificate)和 domain.key(將做爲registry-key) 文件 ls -la domain.* 查看證書文件 cat domain.crt (2) 分發證書到須要訪問 Docker Registry 的所有 agent 節點的下面位置:/etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000/ca.crt 並將證書加入到受信任的證書列表裏。 mkdir -p /etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000 cp domain.crt /etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000/ca.crt sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1; systemctl restart docker ssh -t agent1 "mkdir -p /etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000" ssh -t agent2 "mkdir -p /etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000" scp domain.crt agent1:/etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000/ca.crt scp domain.crt agent2:/etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000/ca.crt ssh -t agent1 "sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1; systemctl restart docker" ssh -t agent2 "sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1; systemctl restart docker" (3) 在 dcos 界面的 Catalog 裏添加 Registry 配置修改以下:選擇Security頁 勾選 enable 填寫 http tls download ip 爲 bootstrap 的 ip 地址 其餘默認(http tls download port:80,http tls certificate filename:domain.crt,http tls key filename:domain.key) 安裝便可。 (4) 測試(可選) (4.1) 添加一個 registry-frontend 服務 在 dcos 界面的 Services 裏添加一個新服務 選擇 Single Contrainer Service ID: /registry-frontend Instances: 1 Container Image: konradkleine/docker-registry-frontend:v2 CPUs: 0.5 Memory (MiB): 128 Networking 頁面 Network Type: Bridge + Add Service Endpoints Container Port: 80 Service Endpoint Name: web 取消勾選 Assign Automatically (可選,設置Host Port方便之後直接訪問固定端口) Host Port: 5555 勾選 Enable Load Balanced Service Address Load Balanced Port: 8080 Health Checks 頁面 + Add Health Check Protocol: HTTP Service Endpoint: web Path: / Environment 頁面 添加環境變量: ENV_DOCKER_REGISTRY_HOST: registry.marathon.l4lb.thisdcos.directory ENV_DOCKER_REGISTRY_PORT: 5000 ENV_MODE_BROWSE_ONLY: true ENV_DOCKER_REGISTRY_USE_SSL: 1 (若是registry-frontend獲取不到資源,能夠去掉試試) 添加Labels: DCOS_SERVICE_PORT_INDEX: 0 DCOS_SERVICE_NAME: registry-frontend HAPROXY_GROUP: external DCOS_SERVICE_SCHEME: http 因爲不能直接訪問 http://DCOS/service/registry-frontend/ 所以須要到DCOS的Services/registry-frontend 的Tasks頁面,點擊正在運行的實例, Marathon Task Configuration節裏有 Host 和 Ports,請用這個地址直接訪問。 (4.2) push 一個 nginx docker pull nginx docker tag nginx registry.marathon.l4lb.thisdcos.directory:5000/nginx docker push registry.marathon.l4lb.thisdcos.directory:5000/nginx 方法二:不安全的 Docker Registry(警告:僅測試使用) ~~~~~~~~ !!!我測試沒法啓動docker,後來採用修改daemon.json的方法: ssh -t master "echo '{\"insecure-registries\": [\"registry.marathon.l4lb.thisdcos.directory:5000/\"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version" ssh -t agent1 "echo '{\"insecure-registries\": [\"registry.marathon.l4lb.thisdcos.directory:5000/\"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version" ssh -t agent2 "echo '{\"insecure-registries\": [\"registry.marathon.l4lb.thisdcos.directory:5000/\"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version" ~~~~~~~~ 不配置TLS證書,修改 docker 服務來忽略安全設置。 在全部的節點執行下面命令(請複製$後面及全部行): $ sudo tee /etc/systemd/system/docker.service.d/override.conf <<-'EOF' [Service] EnvironmentFile=-/etc/sysconfig/docker EnvironmentFile=-/etc/sysconfig/docker-storage EnvironmentFile=-/etc/sysconfig/docker-network ExecStart= ExecStart=/usr/bin/docker daemon -H fd:// $OPTIONS \ $DOCKER_STORAGE_OPTIONS \ $DOCKER_NETWORK_OPTIONS \ $BLOCK_REGISTRY \ $INSECURE_REGISTRY \ --storage-driver=overlay \ --insecure-registry registry.marathon.l4lb.thisdcos.directory:5000 EOF systemctl daemon-reload systemctl restart docker 3.5.2 安裝私有的 Docker Registry 假設已經有一個私有的 Docker Registry,地址是 some.docker.host.com 建立 docker.tar.gz,此文件就是 docker 登陸後的本機生成的記錄登陸信息的文件,打成了包。步驟以下: 首先登陸須要訪問的私有 Registry: docker login some.docker.host.com ~~~~~~~~ 注意:若是是非https的地址,須要在加入以下到 /etc/docker/daemon.json { "insecure-registries" : ["myregistrydomain.com:5000"] } 還能夠建立一個自簽名證書: https://docs.docker.com/registry/insecure/#docker-still-complains-about-the-certificate-when-using-authentication mkdir -p certs openssl req \ -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \ -x509 -days 365 -out certs/domain.crt 注意輸入正確的domain 而後運行registry docker run -d \ --restart=always \ --name registry \ -v `pwd`/certs:/certs \ -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ -p 443:443 \ registry:2 最後,可能須要參考前面3.4節,添加信任到 marathon-lb。 ~~~~~~~~ 而後打包 cd ~ tar -czf docker.tar.gz .docker 最後,複製到所有的節點的 /etc/ 下,好比: scp docker.tar.gz master:/etc/ scp docker.tar.gz agent1:/etc/ scp docker.tar.gz agent2:/etc/ 以後就能夠在服務定義的 json 中指定這個文件位置了,如: "{ "id": "/some/name/or/id", "cpus": 1, "mem": 1024, "instances": 1, "container": { "type": "DOCKER", "docker": { "image": "some.docker.host.com/namespace/repo" } }, "fetch": [ { "uri": "file:///etc/docker.tar.gz" } ] } 固然也能夠指定一個http的地址,只要能下載到docker.tar.gz便可。 3.6 其餘技巧 關閉並禁用一個 agent sudo systemctl kill -s SIGUSR1 dcos-mesos-slave && sudo systemctl stop dcos-mesos-slave sudo systemctl kill -s SIGUSR1 dcos-mesos-slave-public && sudo systemctl stop dcos-mesos-slave-public 3.7 升級 dcos 升級前應查閱版本發佈文檔,避免出錯。 升級指 1.X -> 1.Y 的過程;修補是指 1.X.A -> 1.X.B;升級會重啓服務;修補不會影響服務運行,可是方式是同樣的。 在 bootstrap 節點生成升級文件: dcos_generate_config.sh --generate-node-upgrade-script <installed_cluster_version> 企業版 dcos_generate_config.ee.sh --generate-node-upgrade-script <installed_cluster_version> 而後到每一個節點運行: curl -O <Node upgrade script URL> bash dcos_node_upgrade.sh echo $? 返回0,表示完成升級。 注意:在升級或者修補 Master 節點前,手動刪除 /opt/mesosphere/lib/libltdl.so.7 可避免衝突失敗。 4. 卸載 dcos 注:官方未提供卸載說明。 在全部master和agent節點執行下面命令: /opt/mesosphere/bin/pkgpanda uninstall rm -rf /opt/mesosphere /opt/dcos-prereqs.installed /var/lib/{mesos,dcos,zookeeper,mesosphere} /var/log/mesos /etc/mesosphere /etc/profile.d/dcos.sh /etc/systemd/journald.conf.d/dcos.conf rm -rf /etc/systemd/system/{dcos-*,dcos.*} /etc/systemd/system/multi-user.target.wants/{dcos-*,dcos.*} ps -ef|egrep 'mesos|dcos'|grep -v grep|awk '{print $2}'|xargs kill -9 systemctl daemon-reload rm -rf /tmp/dcos 還須要手動改回dns解析文件,不然agent節點不能訪問bootstrap,從新下載腳本: vi /etc/resolv.conf 也能夠經過 bootstrap 節點 scp 覆蓋過來,如: scp /etc/resolv.conf master:/etc/resolv.conf scp /etc/resolv.conf agent1:/etc/resolv.conf scp /etc/resolv.conf agent2:/etc/resolv.conf 可選重啓:reboot 若是出現 Systemd 錯誤,能夠強制重啓:reboot -f 在bootstrap節點,停用nginx,轉到dcos_generate_config.sh所在目錄,而後刪除多餘文件: docker rm -f nginx cd /root rm -rf dcos-*.tar genconf/{*.json,serve,state} 而後能夠從新安裝dcos。 5. 問題 5.1 若是安裝某些服務(如:marathon-lb)運行失敗,在日誌中報告錯誤: /usr/bin/docker-current: Error response from daemon: shim error: docker-runc not installed on system. 能夠在對應的節點裏配置 /etc/docker/daemon.json "hosts": ["unix:///var/run/docker.sock","tcp://0.0.0.0:2375"], "runtimes": { "docker-runc": { "path": "/usr/libexec/docker/docker-runc-current" } }, "add-runtime": "docker-runc=/usr/libexec/docker/docker-runc-current", "default-runtime": "docker-runc" 5.2 若是 dns 失敗,能夠手動更改 /opt/mesosphere/bin/gen_resolvconf.py,強制加入 dns 解析設置 contents += "search some.domain.com\n" contents += "nameserver 10.10.10.1\n" contents += "nameserver 10.10.10.2\n" 而後重啓服務 systemctl restart dcos-adminrouter systemctl restart dcos-mesos-dns