<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 部署node節點 kubernetes node 節點包含如下組件: - Flanneld:使用flanneld-0.8 支持阿里云 host-gw模式,以獲取最佳性能。 - Docker17.07.0-ce:docker的安裝很簡單,這里也不說了。 - kubelet - kube-proxy - 下面著重講kubelet和kube-proxy的安裝,同時還要將之前安裝的flannel集成TLS驗證。 注意:每臺 node 上都需要安裝 flannel,master 節點上可以不必安裝。 ### 檢查目錄和文件 我們再檢查一下三個節點上,經過前幾步操作生成的配置文件。 # ls /etc/kubernetes/ssl/ admin-key.pem admin.pem ca-key.pem ca.pem kube-proxy-key.pem kube-proxy.pem kubernetes-key.pem kubernetes.pem # ls /etc/kubernetes/ apiserver bootstrap.kubeconfig config controller-manager kube-proxy.kubeconfig scheduler ssl token.csv ### flannel 網絡架構圖 ![image](https://i.imgur.com/aegDizo.jpg) ![image](https://i.imgur.com/zWmGltI.jpg) ![images](http://img.blog.csdn.net/20170424152830472?/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDI3ODkyMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ### 配置安裝Flanneld,默認使用yum 安裝。需要替換二進制 flanneld 下載flanned-0.8 binary. yum install flanneld -y wget https://github.com/coreos/flannel/releases/download/v0.8.0/flanneld-amd64 chmod +x flanneld-amd64 cp flanneld-amd64 /usr/bin/flanneld service配置文件/usr/lib/systemd/system/flanneld.service cat /usr/lib/systemd/system/flanneld.service [Unit] Description=Flanneld overlay address etcd agent After=network.target After=network-online.target Wants=network-online.target After=etcd.service Before=docker.service [Service] Type=notify EnvironmentFile=/etc/sysconfig/flanneld EnvironmentFile=-/etc/sysconfig/docker-network ExecStart=/usr/bin/flanneld-start $FLANNEL_OPTIONS ExecStartPost=/usr/libexec/flannel/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker Restart=on-failure [Install] WantedBy=multi-user.target RequiredBy=docker.service /etc/sysconfig/flanneld配置文件 cat /etc/sysconfig/flanneld # Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="http://172.16.200.100:2379,http://172.16.200.101:2379,http://172.16.200.102:2379" # etcd config key. This is the configuration key that flannel queries # For address range assignment ETCD_PREFIX="/kube-centos/network" FLANNEL_ETCD_KEY="/kube-centos/network" ACCESS_KEY_ID=XXXXXXX ACCESS_KEY_SECRET=XXXXXXX # Any additional options that you want to pass #FLANNEL_OPTIONS=" -iface=eth0 -log_dir=/data/logs/kubernetes --logtostderr=false --v=2" #FLANNEL_OPTIONS="-etcd-cafile=/etc/kubernetes/ssl/ca.pem -etcd-certfile=/etc/kubernetes/ssl/kubernetes.pem -etcd-keyfile=/etc/kubernetes/ssl/kubernetes-key.pem" - 設置etcd網絡,主要是flannel用于分別docker的網絡,‘/coreos.com/network/config’ 這個字段必須與flannel中的"FLANNEL_ETCD_KEY="/coreos.com/network" 保持一致 - 阿里云VPN 網絡模式詳細配置可參考 [AliCloud VPC Backend for Flannel](https://github.com/coreos/flannel/blob/master/Documentation/alicloud-vpc-backend.md) 在etcd中創建網絡配置 執行下面的命令為docker分配IP地址段。 etcdctl mkdir /kube-centos/network etcdctl mk /kube-centos/network/config '{"Network":"10.24.0.0/16","Backend":{"Type":"ali-vpc"}}' etcdctl mk /kube-centos/network/config '{"Network":"10.24.0.0/16","Backend":{"Type":"host-gw"}}' ### 安裝kubernetes-cni 依賴kublete 強制安裝 rpm -ivh --force kubernetes-cni-0.5.1-0.x86_64.rpm --nodeps 配置cni 插件 mkdir -p /etc/cni/net.d cat > /etc/cni/net.d/10-flannel.conf << EOF { "name": "cbr0", "type": "flannel", "delegate": { "isDefaultGateway": true, "forceAddress": true, "bridge": "cni0", "mtu": 1500 } } EOF **cat /etc/sysctl.d/k8s.conf 內核參數修改** net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 sysctl -p /etc/sysctl.d/k8s.conf **查看獲取的地址段** #etcdctl ls /kube-centos/network/subnets /kube-centos/network/subnets/10.24.15.0-24 /kube-centos/network/subnets/10.24.38.0-24 ### 安裝和配置 kubelet kubelet 啟動時向 kube-apiserver 發送 TLS bootstrapping 請求,需要先將 bootstrap token 文件中的 kubelet-bootstrap 用戶賦予 system:node-bootstrapper cluster 角色(role), 然后 kubelet 才能有權限創建認證請求(certificate signing requests): cd /etc/kubernetes kubectl create clusterrolebinding kubelet-bootstrap \ --clusterrole=system:node-bootstrapper \ --user=kubelet-bootstrap **創建 kubelet 的service配置文件** # cat /usr/lib/systemd/system/kubelet.service [Unit] Description=Kubernetes Kubelet Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=docker.service Requires=docker.service [Service] WorkingDirectory=/var/lib/kubelet EnvironmentFile=-/etc/kubernetes/config EnvironmentFile=-/etc/kubernetes/kubelet ExecStart=/usr/local/kubernetes/server/bin/kubelet \ $KUBE_LOGTOSTDERR \ $KUBE_LOG_LEVEL \ $KUBELET_API_SERVER \ $KUBELET_ADDRESS \ $KUBELET_PORT \ $KUBELET_HOSTNAME \ $KUBE_ALLOW_PRIV \ $KUBELET_POD_INFRA_CONTAINER \ $KUBELET_ARGS Restart=on-failure [Install] WantedBy=multi-user.target > kubelet的配置文件/etc/kubernetes/kubelet。其中的IP地址更改為你的每臺node節點的IP地址。 > 注意:/var/lib/kubelet需要手動創建。 **kubelet 配置文件** cat > /etc/kubernetes/kubelet << EOF ### ### kubernetes kubelet (minion) config ## ### The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces) KUBELET_ADDRESS="--address=172.16.200.100" ## ### The port for the info server to serve on ##KUBELET_PORT="--port=10250" ## ### You may leave this blank to use the actual hostname KUBELET_HOSTNAME="--hostname-override=172.16.200.100" ## ### location of the api-server #KUBELET_API_SERVER="--api-servers=http://172.16.200.100:8080" ## ### pod infrastructure container KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=gcr.io/google_containers/pause:latest" ## ### Add your own! KUBELET_ARGS="--cgroup-driver=systemd --cluster-dns=10.254.0.2 --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --require-kubeconfig --cert-dir=/etc/kubernetes/ssl --cluster-domain=cluster.local --hairpin-mode promiscuous-bridge --serialize-image-pulls=false --network-plugin=cni --cni-conf-dir=/etc/cni/net.d/ --cni-bin-dir=/opt/cni/bin/ --network-plugin-mtu=1500 --log-dir=/data/logs/kubernetes/ --v=2 --logtostderr=false" EOF - --address 不能設置為 127.0.0.1,否則后續 Pods 訪問 kubelet 的 API 接口時會失敗,因為 Pods 訪問的 127.0.0.1 指向自己而不是 kubelet; - 如果設置了 --hostname-override 選項,則 kube-proxy 也需要設置該選項,否則會出現找不到 Node 的情況; - --cgroup-driver 配置成 systemd,不要使用cgroup,否則在 CentOS 系統中 kubelet 講啟動失敗。docker修改cgroup啟動參數 --exec-opt native.cgroupdriver=systemd - --experimental-bootstrap-kubeconfig 指向 bootstrap kubeconfig 文件,kubelet 使用該文件中的用戶名和 token 向 kube-apiserver 發送 TLS Bootstrapping 請求; - 管理員通過了 CSR 請求后,kubelet 自動在 --cert-dir 目錄創建證書和私鑰文件(kubelet-client.crt 和 kubelet-client.key),然后寫入 --kubeconfig 文件; - 建議在 --kubeconfig 配置文件中指定 kube-apiserver 地址,如果未指定 --api-servers 選項,則必須指定 --require-kubeconfig 選項后才從配置文件中讀取 kube-apiserver 的地址,否則 kubelet 啟動后將找不到 kube-apiserver (日志中提示未找到 API Server),kubectl get nodes 不會返回對應的 Node 信息; - --cluster-dns 指定 kubedns 的 Service IP(可以先分配,后續創建 kubedns 服務時指定該 IP),--cluster-domain 指定域名后綴,這兩個參數同時指定后才會生效; - --cluster-domain 指定 pod 啟動時 /etc/resolve.conf 文件中的 search domain ,起初我們將其配置成了 cluster.local.,這樣在解析 service 的 DNS 名稱時是正常的,可是在解析 headless service 中的 FQDN pod name 的時候卻錯誤,因此我們將其修改為 cluster.local,去掉嘴后面的 ”點號“ 就可以解決該問題,關于 kubernetes 中的域名/服務名稱解析請參見我的另一篇文章。 - --kubeconfig=/etc/kubernetes/kubelet.kubeconfig中指定的kubelet.kubeconfig文件在第一次啟動kubelet之前并不存在,請看下文,當通過CSR請求后會自動生成kubelet.kubeconfig文件,如果你的節點上已經生成了~/.kube/config文件,你可以將該文件拷貝到該路徑下,并重命名為kubelet.kubeconfig,所有node節點可以共用同一個kubelet.kubeconfig文件,這樣新添加的節點就不需要再創建CSR請求就能自動添加到kubernetes集群中。同樣,在任意能夠訪問到kubernetes集群的主機上使用kubectl --kubeconfig命令操作集群時,只要使用~/.kube/config文件就可以通過權限認證,因為這里面已經有認證信息并認為你是admin用戶,對集群擁有所有權限。 - KUBELET_POD_INFRA_CONTAINER 是基礎鏡像容器,需要翻墻下載。 - --network-plugin=cni 啟用cni 管理docker 網絡 - -cni-conf-dir=/etc/cni/net.d/ CNI 配置路徑 - 注意 需要修改docker cgroup 驅動方式: --exec-opt native.cgroupdriver=systemd > kubelet 依賴啟動配置文件 bootstrap.kubeconfig systemctl daemon-reload systemctl enable kubelet systemctl start kubelet systemctl status kubelet 通過 kublet 的 TLS 證書請求 kubelet 首次啟動時向 kube-apiserver 發送證書簽名請求,必須通過后 kubernetes 系統才會將該 Node 加入到集群。 查看未授權的 CSR 請求 # kubectl get csr NAME AGE REQUESTOR CONDITION node-csr-8I8soRqLhxiH2nThkgUsL2oIaKyh15AuNOVgJddWBqA 2s kubelet-bootstrap Pending node-csr-9byGSZPAX0eT60qME8_2PIZ0Q4GkDTFG-1tvPhVaH40 49d kubelet-bootstrap Approved,Issued node-csr-DpvCEHT98ARavxjdLpa_yl_aNGddNTAX07MEVSAjnUM 4d kubelet-bootstrap Approved,Issued node-csr-nAOtjarW3mJ3boQ3AtaeGCbQYbW_jo8AGscFnk1uxqw 8d kubelet-bootstrap Approved,Issued node-csr-sgI8CYnTFQZqaZg9wdJP6OabqBiNA0DpZ5Z0wCCl4bQ 54d kubelet-bootstrap Approved,Issued 通過 CSR 請求 kubectl certificate approve node-csr-8I8soRqLhxiH2nThkgUsL2oIaKyh15AuNOVgJddWBqA 查看 通過的node kubectl get node NAME STATUS AGE VERSION 172.16.200.206 Ready 11m v1.7.6 172.16.200.209 Ready 49d v1.7.6 172.16.200.216 Ready 4d v1.7.6 自動生成了 kubelet.kubeconfig 文件和公私鑰 ls -l /etc/kubernetes/kubelet.kubeconfig > 注意:假如你更新kubernetes的證書,只要沒有更新token.csv,當重啟kubelet后,該node就會自動加入到kuberentes集群中,而不會重新發送certificaterequest,也不需要在master節點上執行kubectl certificate approve操作。前提是不要刪除node節點上的/etc/kubernetes/ssl/kubelet*和/etc/kubernetes/kubelet.kubeconfig文件。否則kubelet啟動時會提示找不到證書而失敗。 ### 配置 kube-proxy 創建 kube-proxy 的service配置文件 文件路徑/usr/lib/systemd/system/kube-proxy.service cat > /usr/lib/systemd/system/kube-proxy.service << EOF [Unit] Description=Kubernetes Kube-Proxy Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=network.target [Service] EnvironmentFile=-/etc/kubernetes/config EnvironmentFile=-/etc/kubernetes/proxy ExecStart=/usr/local/kubernetes/server/bin/kube-proxy \ $KUBE_LOGTOSTDERR \ $KUBE_LOG_LEVEL \ $KUBE_MASTER \ $KUBE_PROXY_ARGS Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF kube-proxy配置文件/etc/kubernetes/proxy cat > /etc/kubernetes/proxy << EOF ### # kubernetes proxy config # default config should be adequate # Add your own! KUBE_PROXY_ARGS="--bind-address=172.16.200.100 --hostname-override=172.16.200.100 --kube-api-burst=50 --kube-api-qps=20 --master=http://172.16.200.100:8080 --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig --cluster-cidr=10.254.0.0/16 --log-dir=/data/logs/kubernetes/ --v=2 --logtostderr=false" EOF - --hostname-override 參數值必須與 kubelet 的值一致,否則 kube-proxy 啟動后會找不到該 Node,從而不會創建任何 iptables 規則; - kube-proxy 根據 --cluster-cidr 判斷集群內部和外部流量,指定 --cluster-cidr 或 --masquerade-all 選項后 kube-proxy 才會對訪問 Service IP 的請求做 SNAT; - --kubeconfig 指定的配置文件嵌入了 kube-apiserver 的地址、用戶名、證書、秘鑰等請求和認證信息; - 預定義的 RoleBinding cluster-admin 將User system:kube-proxy 與 Role system:node-proxier 綁定,該 Role 授予了調用 kube-apiserver Proxy 相關 API 的權限; - ### 啟動 kube-proxy systemctl daemon-reload systemctl enable kube-proxy systemctl start kube-proxy systemctl status kube-proxy
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看