随笔 - 72,  文章 - 0,  评论 - 1,  阅读 - 22557

k8s通过编辑yaml文件,然后使用kubectl create -f 的方式来启动

deployment可以理解为replication controller的升级版本,主要功能有
 
   确保pod的数量: 如果少于指定数量则创建新的,反之会删除多余的以保证pod数量不变
   确保pod的健康: 当pod运行出错或者无法提供服务时,会杀掉不健康的pod,重新创建新的
   弹性伸缩: 在业务高峰或低峰时,可以通过动态调整pod的数量来提高资源的利用率
   滚动升级: 为一种平滑的升级方式,通过逐步替换的策略,保证整体系统稳定,在初期升级的时候,   可以及时

发现和解决问题,避免问题不断扩大
   以上为rc的功能,Depolyment还有新特性,如:
   事件和状态的查看: 可以查看Deployment的升级详细进度和状态
   回滚: 当升级pod镜像或相关参数发现问题时,可以使用回滚操作回滚到上一个稳定的版本或指定版本
   版本记录:每一次操作都能保存下来,给后续回滚使用
   启动和暂停:对于每一次升级都可以随时暂停和启动
   

修改dashboard的yaml文件

node1 k8s]# vi kubernetes-dashboard.yaml
修改 57  行为           - --apiserver-host=http://192.168.56.11:8080

下面来看一个Nginx的yaml文件

[root@linux-node1 k8s]# vim nginx-deployment.yaml

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: nginx-deployment
spec:
  replicas: 3            #保留3个副本
  template:
    metadata:
      labels:
        app: nginx       #创建service会使用这个标签做关联
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

[root@linux-node1 k8s]# kubectl create -f nginx-deployment.yaml    #使用yaml文件
deployment "nginx-deployment" created

[root@linux-node1 k8s]# kubectl get pod     #获取pod
NAME                                READY     STATUS              RESTARTS   AGE
nginx-deployment-1247087418-kg0p3   0/1       ContainerCreating   0          21s
nginx-deployment-1247087418-llb8d   0/1       ContainerCreating   0          21s
nginx-deployment-1247087418-zhdm3   0/1       ContainerCreating   0          21s


[root@linux-node1 k8s]# kubectl get deployment   #获取
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3         3         3            0           25s


# kubectl get   #可以查看所有指令
You must specify the type of resource to get. Valid resource types include:

    * all
    * certificatesigningrequests (aka 'csr')
    * clusters (valid only for federation apiservers)
    * clusterrolebindings
    * clusterroles
    * componentstatuses (aka 'cs')
    * configmaps (aka 'cm')
    * daemonsets (aka 'ds')
    * deployments (aka 'deploy')
    * endpoints (aka 'ep')
    * events (aka 'ev')
    * horizontalpodautoscalers (aka 'hpa')
    * ingresses (aka 'ing')
    * jobs
    * limitranges (aka 'limits')
    * namespaces (aka 'ns')
    * networkpolicies
    * nodes (aka 'no')
    * persistentvolumeclaims (aka 'pvc')
    * persistentvolumes (aka 'pv')
    * pods (aka 'po')
    * poddisruptionbudgets (aka 'pdb')
    * podsecuritypolicies (aka 'psp')
    * podtemplates
    * replicasets (aka 'rs')
    * replicationcontrollers (aka 'rc')
    * resourcequotas (aka 'quota')
    * rolebindings
    * roles
    * secrets
    * serviceaccounts (aka 'sa')
    * services (aka 'svc')
    * statefulsets
    * storageclasses
    * thirdpartyresources
    error: Required resource not specified.
Use "kubectl explain <resource>" for a detailed description of that resource (e.g. kubectl explain

pods).
See 'kubectl get -h' for help and examples.


现在使用kubectl getpod命令发现容器还在创建中,查看日志发现了报错了
使用kubectl describe pod 查看日志,发现需要修改/etc/docker/daemon.json,
vi /etc/docker/daemon.json

再最后一行加上

"default-ipc-mode": "shareable"

然后重启 docker后不再报错,有2个显示running,还有1个还是在创建中
此时去node2上导入一下之前的2个tar包,pull一下nginx的镜像,然后修改node2的/etc/docker/daemon.json 文件,

在最后加上
"default-ipc-mode": "shareable"  然后重启node2的docker后,就可以发现3个pod的状态都是running了


kubectl delete -f nginx-deployment.yaml   启动yaml文件
kubectl create -f nginx-deployment.yaml   删除yaml文件
kubectl logs pod名称   查看日志 可能需要--namespace=kube-system参数

下面切换回node1

可以用下面的命令去获取pod ip 但是一般用不到,因为pod重建后ip就会发生变化
[root@linux-node1 k8s]# kubectl get pods -o yaml -l app=nginx | grep podIP  


下面开始创建服务

[root@linux-node1 k8s]# vim nginx-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-demo
  labels:
    app: nginx
spec:
   ports:
   - port: 80
     protocol: TCP
   selector:
     app: nginx

保存退出

[root@linux-node1 k8s]# kubectl create -f nginx-service.yaml    #启动服务
service "nginx-demo" created


[root@linux-node1 k8s]# kubectl get service
NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   10.1.0.1     <none>        443/TCP   7h
nginx-demo   10.1.37.4    <none>        80/TCP    1m    刚刚出创建的


[root@linux-node1 k8s]# curl --head http://10.1.37.4
HTTP/1.1 200 OK
Server: nginx/1.17.9
Date: Thu, 05 Mar 2020 17:07:27 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 03 Mar 2020 14:32:47 GMT
Connection: keep-alive
ETag: "5e5e6a8f-264"
Accept-Ranges: bytes

其中上面的 10.1.37.4 这个ip时在启动api时传了一个ip地址范围,那个范围是10.1网段,而之前查看pod ip时发现

是10.2网段,这是因为kubeproxy转换的,如果kubeproxy挂了,就无法访问这个ip(10.1.37.4)了

可以将之前的nginx-deployment.yaml和nginx-service.yaml合并,即书写一份 然后运行


下面启动dashboard

[root@linux-node1 k8s]# kubectl create -f kubernetes-dashboard.yaml
deployment "kubernetes-dashboard" created
service "kubernetes-dashboard" created
[root@linux-node1 k8s]# kubectl get deployment   #发现看不到
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3         3         3            3           6h
[root@linux-node1 k8s]# kubectl get deployment  --namespace=kube-system
NAME                   DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-dashboard   1         1         1            1           21s

因为是使用了系统的namespace 所以需要加上--namespace=kube-system参数

[root@linux-node1 k8s]# kubectl get pod --namespace=kube-system
NAME                                    READY     STATUS    RESTARTS   AGE
kubernetes-dashboard-1811738726-0jfl4   1/1       Running   0          1m


[root@linux-node1 k8s]# kubectl get service --namespace=kube-system
NAME                   CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes-dashboard   10.1.158.203   <nodes>       80:32105/TCP   2m

注意 上面的80:32105/TCP中的 32105 为nodepod  10.1.158.203 这个ip是service的ip是不会变的
我们可以通过宿主机的ip机上这个port去访问dockerdashboard
现在就可以打开http://192.168.56.11:32105了,通过这种nodepod的方式(会将service的端口映射到每一个node上

),所以使用http://192.168.56.11:32105也可以打开,如果访问不到则说明这个节点kubeproxy挂掉了





















posted on   wilson'blog  阅读(673)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示