<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## kubernets單機版安裝部署 > kubernetes部署算是有一定門檻的。為了不從入門到放棄,推薦一開始安裝單機版作為入門熟悉kubectl指令、了解工作原理。 * #### 安裝流程,切換成root ```powershell 1.關閉centos自帶的防火墻 # systemctl disable firewalld # systemctl stop firewalld 2.安裝etcd和kubernetes軟件(會自動安裝docker) # yum install -y etcd kubernetes ``` * #### 修改兩處配置 1. Docker配置文件/etc/sysconfig/docker, OPTIONS='--selinux-enabled=false --insecure-registry gcr.io' ![](https://box.kancloud.cn/02c8c1f3c46e813a699a0aedc5438be7_1024x384.png) 2. Kubernetes apiservce配置文件/etc/kubernetes/apiserver,把--admission_control參數鐘的ServiceAccount刪除 ![](https://box.kancloud.cn/9dec10ab63bdefa4edec02502799b78f_1326x501.png) #### 啟動所有服務 ```shell # systemctl start etcd # systemctl start docker # systemctl start kube-apiserver # systemctl start kube-controller-manager # systemctl start kube-scheduler # systemctl start kubelet # systemctl start kube-proxy ``` ## 初入門小實例 * 部署nginx服務 ```powershell $ kubectl run my-nginx --image=nginx --port=80 $ kubectl get pod # 查看pod ``` > **發現pod狀態無論多久都是處于pending。READY字段一直是0/1**,服務部署失敗的原因是”中國墻“的問題導致無法下載pod啟動時需要的谷歌鏡像,所以我們得間接的創建所需的鏡像。 > > **補充:** Pending狀態表示API Server已經創建Pod,但Pod內還有一個或者多個容器沒有創建,或者正在下載鏡像的過程。詳細的參考`Pod聲明周期和重啟策略` * 創建gcr.io/google_containers/pause-amd64:3.0鏡像 ```powershell $ docker pull googlecontainer/pause-amd64:3.0 $ docker tag googlecontainer/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0 ``` ? ## kubernets指令 * 實例流程 ```powershell # 查看版本 $ kubectl version Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"269f928217957e7126dc87e6adfa82242bfe5b1e", GitTreeState:"clean", BuildDate:"2017-07-03T15:31:10Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"269f928217957e7126dc87e6adfa82242bfe5b1e", GitTreeState:"clean", BuildDate:"2017-07-03T15:31:10Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"} # 顯示集群信息 $ kubectl cluster-info Kubernetes master is running at http://localhost:8080 To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. # 查看集群中有幾個Node $ kubectl get nodes NAME STATUS AGE 127.0.0.1 Ready 18h # 運行一個鏡像 $ kubectl run my-nginx --image=nginx --replicas=2 --port=80 deployment "my-nginx" created # 查看pod $ kubectl get pods NAME READY STATUS RESTARTS AGE my-nginx-379829228-cwlbb 0/1 ContainerCreating 0 20s my-nginx-379829228-czk6w 1/1 Running 0 20s # 查看服務詳情信息 $ kubectl describe pod my-nginx-379829228-cwlbb # 查看已部署 $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE my-nginx 2 2 2 2 3m # 刪除pod $ kubectl delete pod my-nginx-379829228-cwlbb pod "my-nginx-379829228-cwlbb" deleted # 再次查看pod,發現由于replicas機制,pod又生成一個新的 $ kubectl get pods NAME READY STATUS RESTARTS AGE my-nginx-379829228-czk6w 1/1 Running 0 11m my-nginx-379829228-gjd7d 0/1 ContainerCreating 0 5s # 刪除部署的my-nginx服務。徹底刪除pod $ kubectl delete deployment my-nginx deployment "my-nginx" deleted ``` #### 對比docker命令 > k8s的學習路線基本都是從docker[容器]到k8s的,因此兩個對比理解有助于記憶 ```powershell # docker run $ docker run -d -e DOMAIN=cluster --name my-nginx -p 80:80 nginx $ kubectl run my-nginx --image=nginx --port=80 --env="DOMAIN=cluster" # docker ps $ docker ps $ kubectl get pods # docker exec $ docker exec [容器id] ls $ kubectl exec [pod_id] ls # docker exec 交互式 $ docker exec -it [容器id] /bin/sh $ kubectl exec -it [pod_id] -- /bin/sh # docker info $ docker info $ kubectl cluster-info ``` ## 重要名詞 | 名詞 | 翻譯 | | :----------------- | :----- | | Namespace | 命名空間 | | Endpoint | 服務端點 | | Controller Manager | 管理控制中心 | | Replication | 副本控制器 | | | | ## yaml文件管理服務 * 用yaml文件來創建服務 ```yaml # vi nginx.yaml piVersion: extensions/v1beta1 kind: Deployment metadata: name: my-nginx spec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 ``` * 啟動管理服務 ```powershell # 根據yaml文件創建服務 $ kubectl create -f nginx.yaml deployment "my-nginx" created # 查看deployment $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE my-nginx 3 3 3 3 6s # 查看Pod $ kubectl get pod NAME READY STATUS RESTARTS AGE my-nginx-4087004473-dtrjp 1/1 Running 0 7s my-nginx-4087004473-jz80p 1/1 Running 0 7s my-nginx-4087004473-wh576 1/1 Running 0 7s # 根據yaml文件刪除服務 $ kubectl delete -f nginx.yaml deployment "my-nginx" deleted $ kubectl get pod No resources found. $ kubectl get deployment No resources found. ``` ? ? ## Service * 到此,我們部署一個nginx服務 ```shell $ kubectl run my-nginx --image=nginx --port=80 # 創建一個service 且將其暴露到集群外可供訪問 $ kubectl expose deployment/my-nginx --type="NodePort" --port 80 service "my-nginx" exposed # 此時service列表多個my-nginx服務 $ kubectl get services NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.254.0.1 <none> 443/TCP 7d my-nginx 10.254.255.103 <nodes> 80:32589/TCP 7s ``` > 宿主主機內訪問該服務 > ![](https://box.kancloud.cn/55b8afe858ca7fe37984d6487adf0a7a_897x736.png) > 同網段的機器訪問該服務 ![](https://box.kancloud.cn/fba283e93e584346e6040e0fce93a72c_2181x277.png) ## deployments ```powershell # 運行nginx鏡像 $ kubectl run my-nginx --image=nginx --port=80 # 交互式 shell 的方式運行 pod $ kubectl run -i --tty my-nginx --image=nginx --port=80 -- sh # 鏈接到運行中的容器 $ kubectl attach my-nginx-532658988-10kxd -i # 查看deployment $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE my-nginx 1 1 1 1 25m # 擴展10個副本 $ kubectl scale deployment my-nginx --replicas=10 deployment "my-nginx" scaled $ kubectl scale deployment/my-nginx --replicas=10 # 作用效果等同上一條命令 deployment "my-nginx" scaled # 再次顯示deployment $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE my-nginx 10 10 10 1 26m $ kubectl get pods NAME READY STATUS RESTARTS AGE my-nginx-379829228-38hkg 1/1 Running 0 5m my-nginx-379829228-7j15l 1/1 Running 0 31m my-nginx-379829228-c8mt3 1/1 Running 0 5m my-nginx-379829228-f6mm8 1/1 Running 0 5m my-nginx-379829228-q1rj0 1/1 Running 0 5m my-nginx-379829228-qg7lf 1/1 Running 0 5m my-nginx-379829228-rjfbq 1/1 Running 0 5m my-nginx-379829228-v581r 1/1 Running 0 5m my-nginx-379829228-wh49w 1/1 Running 0 5m my-nginx-379829228-wpn98 1/1 Running 0 5m # 縮擴到1個副本 $ kubectl scale deployment/my-nginx --replicas=1 deployment "my-nginx" scaled $ kubectl scale deployment my-nginx --replicas=1 # 作用效果等同上一條命令 ``` #### deployment的更新回滾 ![](https://box.kancloud.cn/0535d4dcc6b0313053ea02411b3f6dec_387x296.png) ```powershell $ kubectl create -f nginx.yaml $ kubectl get pod NAME READY STATUS RESTARTS AGE my-nginx-4087004473-4xj74 1/1 Running 0 3m my-nginx-4087004473-jkptq 1/1 Running 0 3m my-nginx-4087004473-m55s1 1/1 Running 0 3m $ kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE my-nginx 3 3 3 3 4m # 更新應用的鏡像從1.7.9版本——>1.9.1 $ kubectl set image deployment/my-nginx nginx=nginx:1.9.1 deployment "my-nginx" image updated # 確認是否更新成功 $ kubectl rollout status deployment/my-nginx deployment "my-nginx" successfully rolled out # 回滾到上一代版本 $ kubectl rollout undo deployment/my-nginx deployment "my-nginx" rolled back ``` #### 刪除Pod * 有時候deployment、rs、rc、services都為0,但是Pod確存在著。則重啟kubelet服務即可。 ```powershell $ systemctl restart kubelet ``` #### 補充 ```powershell # 列出當前節點名 kubectl get node NAME STATUS AGE 127.0.0.1 Ready 6d # 已知當前節點名為127.0.0.1,用如下命令即可獲得該節點上所有運行節點 $ curl localhost:8080/api/v1/proxy/nodes/127.0.0.1/pods {"kind":"PodList","apiVersion":"v1","metadata":{},"items":null} ``` #### 報錯 ```powershell $ sudo kubectl create -f file.yaml YAML error: found character that cannot start any token # or error:yaml: line 15: found a tab character that violate indentation #file.yaml不可用tab鍵來空格 $ sudo kubectl create -f mysql-rc.yaml error: error validating "mysql-rc.yaml": error validating data: [found invalid field app for v1.ObjectMeta, found invalid field value for v1.Container]; if you choose to ignore these errors, turn validation off with --validate=false #3 $ Error from server (BadRequest): container "mysql" in pod "mysql-677b8" is waiting to start: ContainerCreating --------------------- # kubectl get pod --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE default my-nginx-379829228-b796w 1/1 Running 0 12m kube-system kubernetes-dashboard-2397086622-46tvx 0/1 ContainerCreating 0 8s [root@node01 ~]# kubectl logs -f kubernetes-dashboard-2397086622-46tvx --namespace=kube-system Using HTTP port: 9090 Using apiserver-host location: http://127.0.0.1:8080 Creating API server client for http://127.0.0.1:8080 Error while initializing connection to Kubernetes apiserver. This most likely means that the cluster is misconfigured (e.g., it has invalid apiserver certificates or service accounts configuration) or the --apiserver-host param points to a server that does not exist. Reason: Get http://127.0.0.1:8080/version: dial tcp 127.0.0.1:8080: getsockopt: connection refused Refer to the troubleshooting guide for more information: https://github.com/kubernetes/dashboard/blob/master/docs/user-guide/troubleshooting.md ``` ##### 我們最好不要越過RC而直接創建Pod,因為Replication Controller會通過RC管理Pod副本。實現自動創建、補足、替換、刪除Pod副本,大大提高系統的容災能力 * 重新調度(Rescheduling) * 彈性伸縮(Scaling) * 滾動更新(Rolling Updates) #### 指令 ```powershell # 查看集群中有幾個Node 【swarm:docker node ls】 $ kubectl get nodes NAME STATUS AGE 127.0.0.1 Ready 1h # $ kubectl describe node 127.0.0.1 Name: 127.0.0.1 Role: Labels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/os=linux kubernetes.io/hostname=127.0.0.1 ..................... # Replication controller 復制控制器 $ kubectl get rc NAME DESIRED CURRENT READY AGE mysql 1 1 0 1h #修改RC的副本數,實現Pod的動態縮放 $ kubectl scale rc mysql --replicas=3 replicationcontroller "mysql" scaled ```
                  <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>

                              哎呀哎呀视频在线观看