一步一步学习k8syaml

k8s的command和args

k8s-proxy浅析

k8s高可用和ingress

手头命令:

执行命令:
kubectl exec pod-name date
kubectl exec pod-name -c container-name date
kubectl exec -it pod-name -c container-name /bin/bashkubectl get rc,svc
kubectl delete po,svc -l name=lable-name
kubectl delete pods --all
#干掉rc rs
kubectl delete rc --all
kubectl delete rc --allkubectl logs -f volume-pod -c busybox
kubectl exec -ti volume-pod -c tomcat -- ls /usr/local/tomcat/logs
kubectl exec -ti volume-pod -c tomcat -- tail /usr/local/tomcat/logs/localhost_access_log.2017-05-04.txt
#查看镜像的CMD
docker inpect id
#查看容器中运行着哪些进程
docker top 61ac514f8ea6#查看容器日志
docker logs -f xx
docker ps -l 显示最新启动的一个容器(包括已停止的)
docker stats #查看各个容器的资源占用 这是个很刁的命令
docker stats 54493133d1f0 容器停止后就自动删除: docker run --rm centos /bin/echo "One"
杀死所有正在运行的容器:docker kill $(docker ps -a -q)
删除所有已经停止的容器:docker rm $(docker ps -a -q)
删除所有未打标签的镜像 docker rmi $(docker images -q -f dangling=true)配置代理:
export http_proxy=http://proxy_server:port

基础:
1,创建1个pod

apiVersion: v1
kind: Pod
metadata:name: pod-testlabels:app: webapp
spec:containers:- name: webappimage: nginx:1.11.4-alpineimagePullPolicy: IfNotPresentports:- containerPort: 80

带环境变量:

apiVersion: v1
kind: Pod
metadata:name: myweblabels:name: myweb
spec:containers:- name: mywebimage: kubeguide/tomcat-app:v1imagePullPolicy: IfNotPresentports:- containerPort: 8080env:- name: MYSQL_SERVER_HOSTvalue: 'mysql'- name: MYSQL_SERVICE_PORTvalue: '3306'

静态pod:

1,由kubelet管理,配置kubelete参数KUBELET_OPTS=' --config=/etc/kubernetes/manifests,kubelet监视该目录。

2,kubectl  get pod可以看到,kubectl delete pod删掉后,一直处于pending,直至清单yaml目录删除为止。

apiVersion: v1
kind: Pod
metadata:name: static-podlabels:name: static-pod
spec:containers:- name: static-podimage: nginxports:- name: static-podcontainerPort: 80

2,创建1个rc

apiVersion: v1
kind: ReplicationController
metadata:name: webapp
spec:replicas: 2template:metadata:name: webapplabels:app: webappspec:containers:- name: webappimage: nginx:1.11.4-alpineimagePullPolicy: IfNotPresentports:- containerPort: 80

3,创建1个svc
方法1:

apiVersion: v1
kind: Service
metadata:name: webapp
spec:ports:- port: 8081targetPort: 80selector:app: webapp

方法2:

kubectl export rc webapp

高级
1,创建1个pod,含有多个container

apiVersion: v1
kind: ReplicationController
metadata:name: app01
spec:replicas: 2template:metadata:name: app01labels:app: app01spec:containers:- name: app01-nginximage: nginx:1.11.4-alpineimagePullPolicy: IfNotPresentports:- containerPort: 80- name: app01-tomcatimage: kubeguide/tomcat-app:v1imagePullPolicy: IfNotPresentports:- name: webcontainerPort: 8080protocol: TCP- name: managementcontainerPort: 8005protocol: TCP

创建1个pod,执行命令 command

apiVersion: v1
kind: Pod
metadata:name: pod-with-healthcheck-writefilelabels:app: pod-with-healthcheck-writefile
spec:containers:- image: busyboxcommand:- sleep- "3600"imagePullPolicy: IfNotPresentname: busyboxrestartPolicy: Always
apiVersion: v1
kind: Pod
metadata:name: command-demolabels:purpose: demonstrate-command
spec:containers:- name: command-demo-containerimage: debiancommand: ["printenv"]args: ["HOSTNAME", "KUBERNETES_PORT"]

创建1个pod执行命令-args

apiVersion: v1
kind: Pod
metadata:name: pod-with-healthcheck-writefilelabels:app: pod-with-healthcheck-writefile
spec:containers:- image: busyboxargs:- /bin/sh- -c- echo ok > /tmp/health; spleep 10; rm -rf /tmp/health; sleep 600livenessProbe:exec:command:- cat- /tmp/health

创建一个centos:(官方centos默认不能放后台运行)

apiVersion:
kind:
metadata:name: centos
spec:replicate: 1template:metadata:labels:app:centosspec:containers:- name: centos-instanceimage: centosargs: ["sleep","655369"]ports:- containersPort: 80

2,创建svc
方法1:

kubectl export rc webapp

方法2:

[root@node151 yaml]# cat app01-svc.yaml
apiVersion: v1
kind: Service
metadata:name: app01
spec:ports:- name: nginxport: 80protocol: TCP- name: tomcat-webport: 8080protocol: TCP- name: tomcat-managementport: 8005protocol: TCPselector:app: app01

注:rc只能为pod打1个labels。 如:

apiVersion: v1
kind: ReplicationController
metadata:name: app01
spec:replicas: 2template:metadata:name: app01labels:app: app01app: nginxapp: tomcat
...

只能打到 app: tomcat tag。

1个pod,2个container,共享存储--tomcat日志搜集案例

apiVersion: v1
kind: Pod
metadata:name: volume-pod
spec:containers:- name: tomcatimage: tomcatimagePullPolicy: IfNotPresentports:- containerPort: 8080volumeMounts:- name: app-logsmountPath: /usr/local/tomcat/logs- name: busyboximage: busyboximagePullPolicy: IfNotPresentcommand: ["sh","-c","tail -f /logs/localhost_access_log*.txt"]volumeMounts:- name: app-logsmountPath: /logsvolumes:- name: app-logsemptyDir: {}
kubectl logs -f volume-pod -c busybox
kubectl exec -ti volume-pod -c tomcat -- ls /usr/local/tomcat/logs
kubectl exec -ti volume-pod -c tomcat -- tail /usr/local/tomcat/logs/localhost_access_log.2017-05-04.txt

小结:
从这里可以看到 command指令用法。

configMap:--为pod提供配置

1,提供env

2,提供配置文件

pod使用方法:

1,通过env获取cm种内容

2,通过volume挂载cm种文件

举个栗子:

变量

[root@node151 yaml]# cat cm-appvars.yaml apiVersion: v1
kind: ConfigMap
metadata:name: cm-appvars
data:apploglevel: infoappdatadir: /var/data
[root@node151 yaml]# cat cm-test-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: cm-test-pod
spec:containers:- name: cm-testimage: busyboxcommand: [ "/bin/sh", "-c", "env | grep APP" ]env:- name: APPLOGLEVELvalueFrom:configMapKeyRef:name: cm-appvarskey: apploglevel- name: APPDATADIRvalueFrom:configMapKeyRef:[root@node151 yaml]# cat cm-test-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: cm-test-pod
spec:containers:- name: cm-testimage: busyboxcommand: [ "/bin/sh", "-c", "env | grep APP" ]env:- name: APPLOGLEVELvalueFrom:configMapKeyRef:name: cm-appvarskey: apploglevel- name: APPDATADIRvalueFrom:configMapKeyRef:name: cm-appvarskey: appdatadirname: cm-appvarskey: appdatadir

验证:

kubectl get po --show-all  ---这里运行后会变成complete状态
kubectl logs cm-test-pod #可以看到环境变量

用法2:文件挂载

[root@node151 yaml]# cat cm-appconfigfiles.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: cm-appconfigfiles
data:key-admin-key.pem: -----BEGIN RSA PRIVATE KEY-----MIIEowIBAAKCAQEAxY4sv2ctwdti38slk0IIvdAyIZqaEwVIege96QpxisDqDPWRUkJXWa/npjnwxxG0c/oYG+xQ46j+GQwMDotD/ZmQQA0yykte5i8yIB0mRnHB3ZNbpmwSYFI9j7TKyAhUvB7JfGps+aKxr4nfUSDBQBG06Gbzz/U04s+P/jQi71Z6n5Oepdq8OKpZLRQc0sPZ98z4QWXjV4ccJMOfzEmM3kGeb8oxlb59fTJNMSO0bG0YsLLLfPjb/GRxwFqnTsPW9SmKxVyrTlFXuaQGCAnLaotbC2M5B8kIp8Ake4txYh0Pupzymi2yk/glUBDxdLOZJCZoN9zBWGEh/UWoFlyTyQIDAQABAoIBADX7Z5bVptc2D4p/hED85k6XuVsdV8SiyO8vdmFbjTMRC+OGprMHlb7YJkBxzK1Y1SpryHK43FGZN/W4KQNAYs/FSnl2Ic7NUZ0sgFHuJStSolrdjUmodk0Dq/a8vDx0qlLNRtlMa4K7RjplPjR48tWDASAQIcdNhaoEdaBMts8XIteoieCgQZDbKl/m0jC9s8+I2BtynEKuC9x2PhdlgnOWlGch8T3cM6KUZjMpp5Pj6lWBH7Po5FlufoiUaGSdOiGjIbxtQIoSxaJf+GQ27oXUYuDIlaQ6cwSi1yifP9Q5w+3EIkAKCvOUgEspMuh1TO/f+6RmQILk9sq1Ozu5ZxECgYEAyxGBE8zFD6Sy0Y3GST0fZZ+I6m2jgvLBzHl0sihypHil5td14fXh9X2Q0JqeLBQBPuL6/9+TfN91lX/k+f4+Dl8GVIrXyHkb5nDLBiXwqwZNVUCOsWiRaXRftW9UusVmgZmDV3Mjdo/dRoqvOSGsi6ndxRAkE1inwKUHH7gusscCgYEA+QzLcbqTnOT7bdjPp6z5Tawyyllo8wt6XhmjSoky4scHu4QcYezdI4x3rRV3QVyLqzzix0EY3AVGzjLO+uUOWZ01v1r0jAqgNDLd/e+3iU7fQ2q3Y9Ce2Dkuvw1EB7PZQw6hLq1pV1NPBW4ovO6r8XEtxOL2bBwfQMGSVR6y9O8CgYBCx47bJAvqCQ+FOkpq617X3I76CPQsrAhvZcGqlQKec86bC2AI3wNf59snvrElba67L4m7e5rVBed1MonqbGGb+EPsqXwswScbsRwS+YcbtwbXclN6pBitxUd0Mxh6E1CSbhlzOLoA027BM/pLn3dOtp3noFc8xXrlL2AYXkl9IQKBgQC+e2+7G3W9QVGgsXwZhe3j33m1VG81vSipgjhnUMpPsuSSIjhHGZAFmXELO+jLYAofPWFB/uMRnSOLoEa4lKrGFby/D8UMuy/O3Lz3dPpOlbmjaaK8QBrNy+aaD35h2cepRy42ckGonbpJr/iOkImIEAVumhzZkSTCNYtDeUhslwKBgFvULjjmaAu/VDriBxDS64PmrNHLHuegMY/qxONVGyHvmnVqD6XuCdOxzMPWIgxFFc1RY9VdYAfx6EkspRT3aTjVMvQdXZ2H5wOWtEW+qkfYK/WaRXH9KkMrrxuwgszsGzKHvIRxtyaH+VQcVMgrBKmi+pQweyJuwNRTskK59XJl-----END RSA PRIVATE KEY-----key-admin.pem: -----BEGIN CERTIFICATE-----MIID3TCCAsWgAwIBAgIUH6w5Lfb2KXf3J/uccCqIBSZ1cYMwDQYJKoZIhvcNAQELBQAwZTELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0JlaUppbmcxEDAOBgNVBAcTB0JlaUppbmcxDDAKBgNVBAoTA2s4czEPMA0GA1UECxMGU3lzdGVtMRMwEQYDVQQDEwprdWJlcm5ldGVzMB4XDTE3MDUwMzEwMjcwMFoXDTE4MDUwMzEwMjcwMFowazELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0JlaUppbmcxEDAOBgNVBAcTB0JlaUppbmcxFzAVBgNVBAoTDnN5c3RlbTptYXN0ZXJzMQ8wDQYDVQQLEwZTeXN0ZW0xDjAMBgNVBAMTBWFkbWluMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxY4sv2ctwdti38slk0IIvdAyIZqaEwVIege96QpxisDqDPWRUkJXWa/npjnwxxG0c/oYG+xQ46j+GQwMDotD/ZmQQA0yykte5i8yIB0mRnHB3ZNbpmwSYFI9j7TKyAhUvB7JfGps+aKxr4nfUSDBQBG06Gbzz/U04s+P/jQi71Z6n5Oepdq8OKpZLRQc0sPZ98z4QWXjV4ccJMOfzEmM3kGeb8oxlb59fTJNMSO0bG0YsLLLfPjb/GRxwFqnTsPW9SmKxVyrTlFXuaQGCAnLaotbC2M5B8kIp8Ake4txYh0Pupzymi2yk/glUBDxdLOZJCZoN9zBWGEh/UWoFlyTyQIDAQABo38wfTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFDA855ogXEPB8jQ+8vCPaI470l10MB8GA1UdIwQYMBaAFPKIL6U7gHcBzv0TNO+5SymZ6fcJMA0GCSqGSIb3DQEBCwUAA4IBAQBz9jhLSGeOQYbQDSb2LDgbO/fBpbZnNzSVCX6HgWgHJaC43J0SruGD+u3jyhhhYhsQLO+lQTZl3yzoWOjWYLlGc5cDqMDf6d8YAElyAywpbip/Xa/EuY/2oiOSxmJosyY4NltIeeUMccbmOX1mx0wfyD1mrFizplY5OpSfqLOFdLYfftZzPHbZznDhvRyow3/Q+gTqFq8JC8x7JWKCfQEjY/k20w8ptz+xSPqtwYKyE79S1+qDK1P459cJJNS7YprbPY7oEUnbigmU1RNt2w4JZzbfTDSeoTVx9XWRMgTNQ1har1NboZGaVJhROepe38vgVvfH5gKckgISrakiB19M-----END CERTIFICATE-----key-ca.pem: -----BEGIN CERTIFICATE-----MIIDvjCCAqagAwIBAgIUP/7TgWfkZ6torHllMQK4qKVdKm0wDQYJKoZIhvcNAQELBQAwZTELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0JlaUppbmcxEDAOBgNVBAcTB0JlaUppbmcxDDAKBgNVBAoTA2s4czEPMA0GA1UECxMGU3lzdGVtMRMwEQYDVQQDEwprdWJlcm5ldGVzMB4XDTE3MDUwMzEwMDcwMFoXDTIyMDUwMjEwMDcwMFowZTELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0JlaUppbmcxEDAOBgNVBAcTB0JlaUppbmcxDDAKBgNVBAoTA2s4czEPMA0GA1UECxMGU3lzdGVtMRMwEQYDVQQDEwprdWJlcm5ldGVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0HQdd+mApPqm9iQKwyNzEtQFShNm3l0hfZeFsoPK7pkNcc8NMajdiNzzSvorb8W8n4ALNt4i6lHADmw82JfHmunkO1EfKWu0kzSb47JXsqLDBjGm/rIENgXP+z+dJME8ELLP+xYtRssHGqR67NqHQWH3WcU86DmxmOT+eq5qsSzGYVnLOH1vHY1m1OcLslO+NU+9QY48AwGcOcE1iVUkSWEGtlr9KR0hi+x0tWJpJJ2WZspmg6szbFUO+8ucQyaymTBWNEt1mo7vawwivJNpM+td9FdXvUBtD9hZKf0nyzFCsnOhFsHBZfIq7oQc1rQ10fQTSVVjZkH8Euh7hQHMZQIDAQABo2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4EFgQU8ogvpTuAdwHO/RM077lLKZnp9wkwHwYDVR0jBBgwFoAU8ogvpTuAdwHO/RM077lLKZnp9wkwDQYJKoZIhvcNAQELBQADggEBAFKzFPaTXU5z1QNFEVjcJnLHvp8qlsfUpy6ivjD5x6AZErrrbKTMU7JATx5uo0G62lMarjhGcJV6l/bEfcDlGVvdSe3Nw7+bbYDlLYop1at84aD8sjTRuE1/m1XMhiMMnlOvF5es6joCzFgIEistjC/3d5kP+oPASmNPSTffHG04kEKbbcwWYACVtlHgdhohab9IGd5JskZGptjCCZcVEqjGtbT6gQ4p8Io5Fiz3W9HpD+2Dhk/pT6u0rLDR3p+4/bqo+NGrjOHHbQpe24kkg7nhZZSUmJKo6hrDRbnDVA94eznsj3Nl4U2rrg+poVxbRu4rIeH7dmQkL/6i4X6TZqs=-----END CERTIFICATE-----

注意:以上都是实验性key,没啥意义。

[root@node151 yaml]# cat cm-test-app.yaml
apiVersion: v1
kind: Pod
metadata:name: cm-test-app
spec:containers:- name: cm-test-appimage: kubeguide/tomcat-app:v1ports:- containerPort: 8080volumeMounts:- name: certkeymountPath: /configfilesvolumes:- name: certkeyconfigMap:name: cm-appconfigfilesitems:- key: key-admin.pempath: admin.pem- key: key-admin-key.pempath: admin-key.pem- key: key-ca.pempath: ca.pem

验证:

kubectl exec -it cm-test-app -- bash
ls /configfiles

如果不指定items: 则挂载后的文件名字为key-xxx

[root@node151 yaml]# cat cm-test-app.yaml
apiVersion: v1
kind: Pod
metadata:name: cm-test-app
spec:containers:- name: cm-test-appimage: kubeguide/tomcat-app:v1ports:- containerPort: 8080volumeMounts:- name: certkeymountPath: /configfilesvolumes:- name: certkeyconfigMap:name: cm-appconfigfiles

cm创建的3种方法:

kubectl create configmap ca.pem --from-file=ca.pem
kubectl create configmap cm-appconfig --from-file=configfilesdir
kubectl create configmap cm-appenv --from-literal=loglevel=info --from-literal=appdatadir=/var/data

使用cm注意:

1,在pod前创建

2,只能挂载目录

外部访问:

Services overview diagram for userspace proxy

1,container级别端口映射到物理机
注:cni网络不支持
Limitation: Due to #31307, HostPort won’t work with CNI networking plugin at the moment. That means all hostPort attribute in pod would be simply ignored

如果非cni:

apiVersion: v1
kind: Pod
metadata:name: pod-hostportlabels:app: webapp
spec:containers:- name: webappimage: nginx:1.11.4-alpineimagePullPolicy: IfNotPresentports:- containerPort: 80hostPort: 30090

2,pod级别端口映射到物理机: 这种方式不分配podip 共享物理机的ip地址.同时进程可以在物理机看到

apiVersion: v1
kind: Pod
metadata:name: pod-hostnetworklabels:app: webapp
spec:hostNetwork: truecontainers:- name: webappimage: nginx:1.11.4-alpineimagePullPolicy: IfNotPresentports:- containerPort: 80
[root@no161 ~]# kk|grep po
default       pod-hostnetwork                               1/1       Running    0          18s       192.168.8.162    no162
[root@no162 ~]# ps -ef|grep nginx
root     29405 29388  0 15:00 ?        00:00:00 nginx: master process nginx -g daemon off;
100      29426 29405  0 15:00 ?        00:00:00 nginx: worker process

3,svc级别端口映射到物理机

apiVersion: v1
kind: Service
metadata:name: webapp
spec:type: NodePortports:- port: 80targetPort: 80nodePort: 30081selector:app: webapp

4,svc还可以将请求发给第三方lb,由lb来转发到各个pod。

svc高级
创建一个svc可访问外部mysql服务
1,创建1个无selector的svc

apiVersion: v1
kind: Service
metadata:name: my-service
spec:ports:- protocol: TCPport: 3306targetPort: 3306

创建1个同name的endpoint即会自动关联到上面svc。

apiVersion: v1
kind: Endpoints
metadata:name: my-service
subsets:- addresses:- ip: 192.168.6.87ports:- port: 3306

测试:

node151$  mysql -h svc-address -uroot -pxxx

liveness-活跃性

1,写文件

apiVersion: v1
kind: Pod
metadata:name: pod-with-healthcheck-writefilelabels:app: pod-with-healthcheck-writefile
spec:containers:- name: pod-with-healthcheck-writefileimage: busyboxargs:- /bin/sh- -c- echo ok > /tmp/health; spleep 10; rm -rf /tmp/health; sleep 600livenessProbe:exec:command:- cat- /tmp/healthinitialDelaySeconds: 15timeoutSeconds: 1

2,tcp sock:通过与容器localhost:80建连接

apiVersion: v1
kind: Pod
metadata:name: pod-with-healthcheck-tcpsock
spec:containers:- name: nginximage: nginx:1.11.4-alpineimagePullPolicy: IfNotPresentports:- containerPort: 80livenessProbe:tcpSocket:port: 80initialDelaySeconds: 30timeoutSeconds: 1

3,http status 200<

apiVersion: v1
kind: Pod
metadata:name: pod-with-healthcheck
spec:containers:- name: nginximage: nginx:1.11.4-alpineimagePullPolicy: IfNotPresentports:- containerPort: 80livenessProbe:httpGet:path: /_status/healthzport: 80initialDelaySeconds: 30 #首次创建后,等多久去检查timeoutSeconds: 1  #当超时,干掉重建
#通过本地的kubenetes发起请求检查
kubectl logs -f pod-with-healthcheck192.168.6.154 - - [10/May/2017:05:46:15 +0000] "GET /_status/healthz HTTP/1.1" 404 169 "-" "Go-http-client/1.1" "-"
192.168.6.154 - - [10/May/2017:05:46:25 +0000] "GET /_status/healthz HTTP/1.1" 404 169 "-" "Go-http-client/1.1" "-"

[k8s]一步一步学习k8syaml相关推荐

  1. netcore权限控制_记录这两年是如何一步一步转型到.net core+k8s

    2017年12月份,我离开北京,回到了武汉,开始在现在这家公司担任架构师工作.经过2年的时间,逐步完成以.net core+k8s为核心的技术架构.文末有彩蛋. 以下整理这两年的主要时间节点: 201 ...

  2. 【深度学习基础】一步一步讲解卷积神经网络

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送 本文转自:一步一步讲解卷积神经网络 卷积神经网络(Convoluti ...

  3. 通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本...

    通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本   版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 ...

  4. 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序 - 强烈推荐!!!

    一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序 本文根据<Professional ASP.NET MVC 1.0>中微软牛人Scott Guthrie 提供 ...

  5. 一步一步学习SignalR进行实时通信_6_案例

    原文:一步一步学习SignalR进行实时通信_6_案例一步一步学习SignalR进行实时通信\_6_案例1 一步一步学习SignalR进行实时通信_6_案例1 前言 类的定义 各块功能 后台 上线 下 ...

  6. 据lovecherry的一步一步学Remoting序列文章学习.net Remoting日记(2)

    今天学习了服务器端激活和客户端激活的区别!可还是出现了一点点的差错,经过对比得到正确的调用方法,整理如下: 1.服务器端激活,分为两种方式Singleton和SingleCall方式 Server端A ...

  7. Java程序员从笨鸟到菜鸟之(一百零八)一步一步学习webservice(二)webservice基本原理

    本来这第二篇打算讲解"开发第一个基于XFire的webservice"的内容来着.但是想想.开发实例只是局限于了会用的层面上.如果想真正的理解webservice还是需要挖掘其原理 ...

  8. 一步一步学习iOS 5编程(第三版)-PDF中文版-正式发布!

    目前,这是第一本介绍iOS 5.x 和 Xcode 4.4 的中文版书籍,尤其适合于iOS 编程开发初学者.本教程由 EntLib.com 团队编写.如有任何技术问题,欢迎留言. 电子版 – PDF ...

  9. GitChat · 大数据 | 一步一步学习大数据:Hadoop 生态系统与场景

    目录(?)[-] Hadoop概要 Hadoop相关组件介绍 HDFS Yarn Hive HBase Spark Other Tools Hadoop集群硬件和拓扑规划 硬件配置 软件配置 Hado ...

最新文章

  1. 一个popup弹窗实现思路--(基于mintui分析)
  2. 辛星和您一起手写CSS气泡
  3. python 绘制柱状图-「Python」python绘制图表
  4. 消息和事件的区别 VC++解惑
  5. Linux内核编程广泛使用的前向声明(Forward Declaration)
  6. java jri_Java调用R(二)_JRI | 学步园
  7. Helm 3 完整教程(一):Helm 3 简介
  8. 基于Arduino的智能避障小车
  9. Android面试线程,android 面试题 - 多线程部分
  10. 南卡和声阔蓝牙耳机哪个比较好用?降噪效果好的蓝牙耳机推荐
  11. 裤子尺码对照表eur40_裤子尺码对照表
  12. java 曼哈顿距离_曼哈顿距离(A *)
  13. MATLAB在线编辑网站及使用教程
  14. 虚拟机Hadoop localhost:8080无法打开解决办法
  15. 在虚拟机Virtual box搭建linux环境
  16. Kubernetes CKAD 1.20 - 真题 (第2题) - 全网
  17. python中find是什么意思啊_python中str的find()
  18. 国家关键信息基础设施是网络安全的重中之重
  19. css---7自定义字体
  20. 智能时代下的便利优势

热门文章

  1. js如何实现阿拉伯数字转中文大写数字
  2. airtest踩坑日记
  3. python多任务、面向对象、命令行启动动态绑定端口号静态web服务器代码实现
  4. Kafka 压缩、限流和 SASL_PLAIN 、 SASL_SCRAM-SHA-256简单认证
  5. WPF翻盘连连看(二)
  6. (转)图森技术汇 | 聊聊Anchor的前世今生(上)
  7. 请插入多卷集的最后一张磁盘,然后单击”确认“继续
  8. 【python机器学习】——patsy的简介、安装、使用方法之详细攻略
  9. 对比python字符串函数,学习pandas的str矢量化字符串函数
  10. 【前端】js 视频笔记(DOM BOM)