■ port
port是k8s集群内部访问service的端口,即通过clusterIP: port可以访问到某个service
■ nodePort
nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort可以从外部访问到某个service
■ targetPort
targetPort是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器
■ containerPort
containerPort是pod内部容器的端口,targetPort映射到containerPort
注:
■ 从外部访问
从nodeport端口经过kube-proxy,kube-proxy再把请求给targetPort,targetPort会映射到容器的containerPort,直接访问服务
■ 从内部访问
Port端口经过kube-proxy把请求给targetPort,targetPort会映射到容器的containerPort,直接访问服务
■ infrastructure container 基础容器
● 维护整个Pod网络空间
● node节点操作
● 查看容器的网络
[root@node01 ~]# cd /opt/kubernetes/
[root@node01 kubernetes]# ls
bin cfg ssl
[root@node01 kubernetes]# cd cfg
[root@node01 cfg]# ls
bootstrap.kubeconfig flanneld kubelet kubelet.config kubelet.kubeconfig kube-proxy kube-proxy.kubeconfig
[root@node01 cfg]# vim kubelet
#每次创建Pod时候就会创建,与Pod对应的,对于用户是透明的
[root@node01 ~]# docker ps
■ initcontainers 初始化容器(可以提供依赖环境,为业务容器提供初始化环境)
先于业务容器开始执行,原先Pod中容器是并行开启,现在进行了改进
■ container 业务容器
并行启动
■ IfNotPresent:默认值,镜像在宿主机上不存在时才拉取
■ Always:每次创建Pod都会重新拉取一次镜像
■ Never:Pod永远不会主动拉取这个镜像
[root@master01 ~]# kubectl edit deployment/nginx-deployment
[root@master01 ~]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run #可检查语法
[root@master01 ~]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml #o为out,输出
[root@master01 ~]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml > /opt/nginx-test.yaml
[root@master01 ~]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json
[root@master01 ~]# kubectl get deploy/nginx-deployment --export -o yaml
[root@master01 ~]# kubectl get deploy/nginx-deployment --export -o yaml > my-deploy.yaml
[root@master01 ~]# kubectl explain pods.spec.containers
kubectl delete pod xxx --force --grace-period=0
[root@harbor ~]# cd /usr/local/bin
[root@harbor bin]# rz
[root@harbor bin]# ls
docker-compose
[root@harbor bin]# chmod +x docker-compose
[root@harbor bin]# ls
docker-compose
[root@harbor bin]# cd ..
[root@harbor local]# rz
[root@harbor local]# tar zxvf harbor-offline-installer-v1.2.2.tgz
[root@harbor local]# cd harbor/
[root@harbor harbor]# vim harbor.cfg
[root@harbor harbor]# sh install.sh #启动安装
[root@node01 ~]# vim /etc/docker/daemon.json
[root@node02 ~]# vim /etc/docker/daemon.json
[root@node02 docker]# systemctl restart docke
[root@node01 docker]# systemctl restart docke
[root@node01 ~]# docker login 192.168.140.70
[root@node02 ~]# docker login 192.168.140.70
[root@node01 ~]# docker pull tomcat:8.0.52 #需要登录才能下载,login
[root@node01 ~]# docker tag tomcat:8.0.52 192.168.140.70/project/tomcat #镜像打标签
[root@node01 ~]# docker push 192.168.140.70/project/tomcat
# 上传镜像到harbor
[root@master01 ~]# vim tomcat-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-tomcat
spec:
replicas: 2
template:
metadata:
labels:
app: my-tomcat
spec:
containers:
- name: my-tomcat
image: docker.io/tomcat:8.0.52
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-tomcat
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 31111
selector:
app: my-tomcat
[root@master01 ~]# kubectl create -f tomcat-deployment.yaml
注:
如果遇到处于Terminating状态的无法删除的资源如何处理
这种情况下可以使用强制删除命令:
kubectl delete pod [pod name] --force --grace-period=0 -n [namespace]
[root@node02 ~]# cd .docker/
[root@node02 .docker]# ls
config.json
[root@node02 .docker]# cat config.json
{
"auths": {
"192.168.140.20": {
"auth": "emhhbmdzYW46QWJjMTIzNDU="
},
"192.168.140.70": {
"auth": "YWRtaW46SGFyYm9yMTIzNDU="
}
}
}
[root@master01 ~]# vim registry-pull-secret.yaml #创建凭证
[root@master01 ~]# kubectl create -f registry-pull-secret.yaml
[root@master01 ~]# kubectl get secret #查看secret资源
[root@master01 ~]# kubectl delete -f tomcat-deployment.yaml
[root@master01 ~]# vim tomcat-deployment.yaml
[root@master01 ~]# kubectl create -f tomcat-deployment.yaml
[root@master01 ~]# kubectl get pods -w
[root@master01 ~]# kubectl describe pod my-tomcat
spec.containers[].resources.limits.cpu #cpu上限
spec.containers[].resources.limits.memory #内存上限
spec.containers[].resources.requests.cpu #创建时分配的基本CPU资源
spec.containers[].resources.requests.memory #创建时分配的基本内存资源
注:请求资源是指创建容器初始化给的资源
限制资源是指容器运行时,最高不能超过的资源
[root@master01 ~]# mkdir demo
[root@master01 ~]# cd demo/
[root@master01 demo]# vim pod2.yaml
[root@master01 demo]# kubectl apply -f pod2.yaml
pod/frontend created
[root@master01 demo]# kubectl describe pod frontend
[root@master01 demo]# kubectl get pods -o wide
[root@master01 demo]# kubectl describe nodes 192.168.140.20 #查看具体事件
重启策略:Pod在遇到故障之后重启(重新创建)的动作
1:Always:当容器终止退出后,总是重启容器,默认策略
2:OnFailure:当容器异常退出(退出状态码非0)时,重启容器
3:Never:当容器终止退出,从不重启容器
(注意:k8s中不支持重启Pod资源,只有删除重建)
[root@master01 demo]# vim pod3.yaml
apiVersion: v1
kind: Pod
metadata:
name: foo
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]
args: #使用参数
- /bin/sh
- -c #使用命令
- sleep 30; exit 3 #休眠30秒,然后异常退出
[root@master01 demo]# kubectl apply -f pod3.yaml
[root@master01 demo]# kubectl get pods -w
[root@master01 demo]# kubectl get pods
[root@master01 demo]# kubectl delete -f pod3.yaml
[root@master01 demo]# vim pod3.yaml
[root@master01 demo]#
[root@master01 demo]# kubectl get pods
注:跟container同一个级别
完成状态不会进行重启
规则可以同时定义
livenessProbe 如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
ReadinessProbe 如果检查失败,kubernetes会把Pod从service endpoints(proxy的负载均衡)中剔除
[root@master01 demo]# vim pod4.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy;sleep 10
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
[root@master01 demo]# kubectl get pods -w