01_K8S端口映射启动容器
Docker的网络模式:
默认桥接Docker0,外界无法访问
端口映射
主机网络
注意:这里可以考虑关闭harbor容器仓库,设置IfNotPresent参数!
K8S端口映射配置create.yml:
[root@master ~]# cat create.yml
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 1
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: mynginx
imagePullPolicy: IfNotPresent
image: 10.0.0.230/shijiange/shijiange:nginx
ports:
- containerPort: 80
hostPort: 90
启动带端口映射的容器:
# kubectl --server=192.168.237.50:8080 create -f create.yml
[root@master ~]# kubectl create -f create.yml
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-9h4rj 1/1 Running 0 5s
观察是否使用了端口映射,外界访问:
[root@node1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9fd1361204f5 8b2d1774c229 "sjgrun" 18 seconds ago Up 16 seconds k8s_mynginx_nginx-9h4rj_default_e4e6c8e7-8ac0-11ea-9cdf-000c290f6f2b_0
799de3fc5537 k8s.gcr.io/pause:3.1 "/pause" 19 seconds ago Up 17 seconds 0.0.0.0:90->80/tcp k8s_POD_nginx-9h4rj_default_e4e6c8e7-8ac0-11ea-9cdf-000c290f6f2b_0
测试:
[root@node1 ~]# curl 10.0.0.231:90
启动端口映射说明:
1.需要注意端口冲突。同一个Pod无法启动多个相同容器,因为端口冲突
2.kubectl --server=192.168.237.50:8080 scale rc nginx --replicas=x
[root@master ~]# kubectl scale rc nginx --replicas=4
replicationcontroller/nginx scaled
[root@master ~]# kubectl get pod #有两个nginx容器正常,分属两台宿主机
NAME READY STATUS RESTARTS AGE
nginx-67znv 0/1 Pending 0 3s
nginx-8sff5 0/1 Pending 0 3s
nginx-9h4rj 1/1 Running 0 5m34s
nginx-bcbg5 1/1 Running 0 3s
查看:
[root@master ~]# kubectl describe pod nginx-67znv
Warning FailedScheduling 47s (x4 over 112s) default-scheduler 0/2 nodes are available: 2 node(s) didn't have free ports for the requested pod ports.
----------------------------------
02_K8S主机模式启动容器
K8S主机模式启动容器create.yml:
[root@master ~]# cat create.yml
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 1
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: mynginx
imagePullPolicy: IfNotPresent
image: 10.0.0.230/shijiange/shijiange:nginx
hostNetwork: true
启动主机模式的容器
# kubectl --server=192.168.237.50:8080 create -f create.yml
[root@master ~]# kubectl create -f create.yml
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-jjjbl 1/1 Running 0 3s
[root@master ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3cd7cea116cc 8b2d1774c229 "sjgrun" 8 seconds ago Up 8 seconds k8s_mynginx_nginx-jjjbl_default_8f9efe3d-8ac3-11ea-9cdf-000c290f6f2b_0
02b009ee958c k8s.gcr.io/pause:3.1 "/pause" 8 seconds ago Up 8 seconds k8s_POD_nginx-jjjbl_default_8f9efe3d-8ac3-11ea-9cdf-000c290f6f2b_0
观察是否使用主机网络:
[root@master ~]# curl 127.0.0.1
[root@master ~]# netstat -lntup|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 48667/nginx: master
主机模式启动容器说明:
需要注意端口冲突。同一个Pod无法启动多个相同容器,因为端口冲突!
# kubectl --server=192.168.237.50:8080 scale rc nginx --replicas=x
[root@master ~]# kubectl scale rc nginx --replicas=3
[root@master ~]# kubectl get pod #master和node节点都有一个正常端口80的nginx容器
NAME READY STATUS RESTARTS AGE
nginx-dfqnp 1/1 Running 0 4s
nginx-jjjbl 1/1 Running 0 3m6s
nginx-zbn74 0/1 Error 0 4s
[root@master ~]# netstat -lntup|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 48667/nginx: master
[root@node1 ~]# netstat -lntup|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 105758/nginx: maste
[root@master ~]# kubectl describe pod nginx-zbn74
Warning BackOff 71s (x10 over 3m21s) kubelet, master Back-off restarting failed container