CentOS7系列--5.3CentOS7中配置和管理Kubernetes
CentOS7配置和管理Kubernetes
Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。
使用Kubernetes可以:
Ø 自动化容器的部署和复制
Ø 随时扩展或收缩容器规模
Ø 将容器组织成组,并且提供容器间的负载均衡
Ø 很容易地升级应用程序容器的新版本
Ø 提供容器弹性,如果容器失效就替换它,等等
实际上,使用Kubernetes只需一个部署文件,使用一条命令就可以部署多层容器(前端,后台等)的完整集群:
$ kubectl create -f single-config-file.yaml
https://kubernetes.io/docs/getting-started-guides/centos/centos_manual_config/
https://www.cnblogs.com/zhenyuyaodidiao/p/6500830.html
1. 配置Admin Node与Container Node
1.1. 系统信息
centos-master = 192.168.1.101 = server1.smartmap.com
centos-minion-1 = 192.168.1.102 = server2.smartmap.com
centos-minion-2 = 192.168.1.103 = server3.smartmap.com
centos-minion-3 = 192.168.1.104 = server4.smartmap.com
1.2. 创建YUM更新源
[root@server1 ~]# vi /etc/yum.repos.d/virt7-docker-common-release.repo
[virt7-docker-common-release]
name=virt7-docker-common-release
baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/
gpgcheck=0
1.3. 安装 Kubernetes, etcd and flannel
[root@server1 ~]# yum -y install --enablerepo=virt7-docker-common-release kubernetes etcd flannel
Loaded plugins: fastestmirror
base | 3.6 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
virt7-docker-common-release | 3.4 kB 00:00:00
(1/5): base/7/x86_64/group_gz | 156 kB 00:00:00
1.4. 加入IP与服务器名映射到hosts文件中
[root@server1 ~]# echo "192.168.1.101 server1.smartmap.com
> 192.168.1.102 server2.smartmap.com
> 192.168.1.103 server3.smartmap.com
> 192.168.1.104 server4.smartmap.com" >> /etc/hosts
[root@server1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.101 server1.smartmap.com
192.168.1.102 server2.smartmap.com
192.168.1.103 server3.smartmap.com
192.168.1.104 server4.smartmap.com
[root@server1 ~]#
1.5. 修改/etc/kubernetes/config文件
[root@server1 ~]# vi /etc/kubernetes/config
###
# kubernetes system config
#
# The following values are used to configure various aspects of all
# kubernetes services, including
#
# kube-apiserver.service
# kube-controller-manager.service
# kube-scheduler.service
# kubelet.service
# kube-proxy.service
# logging to stderr means we get it in the systemd journal
KUBE_LOGTOSTDERR="--logtostderr=true"
# journal message level, 0 is debug
KUBE_LOG_LEVEL="--v=0"
# Should this cluster be allowed to run privileged docker containers
KUBE_ALLOW_PRIV="--allow-privileged=false"
# How the controller-manager, scheduler, and proxy find the apiserver
KUBE_MASTER="--master=http://192.168.1.101:8080"
1.6. 修改/etc/kubernetes/config文件
[root@server1 ~]# vi /etc/sysconfig/docker
# /etc/sysconfig/docker
# Modify these options if you want to change the way the docker daemon runs
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
if [ -z "${DOCKER_CERT_PATH}" ]; then
DOCKER_CERT_PATH=/etc/docker
fi
# Do not add registries in this file anymore. Use /etc/containers/registries.conf
# from the atomic-registries package.
#
# docker-latest daemon can be used by starting the docker-latest unitfile.
# To use docker-latest client, uncomment below lines
#DOCKERBINARY=/usr/bin/docker-latest
#DOCKERDBINARY=/usr/bin/dockerd-latest
#DOCKER_CONTAINERD_BINARY=/usr/bin/docker-containerd-latest
#DOCKER_CONTAINERD_SHIM_BINARY=/usr/bin/docker-containerd-shim-latest
OPTIONS='--insecure-registry registry:5000'
2. 配置Admin Node
2.1. 修改/etc/etcd/etcd.conf文件
[root@server1 ~]# vi /etc/etcd/etcd.conf
# [member]
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
#ETCD_SNAPSHOT_COUNT="10000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
#ETCD_CORS=""
#
#[cluster]
#ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
# if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
#ETCD_INITIAL_CLUSTER="default=http://localhost:2380"
#ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_SRV=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_STRICT_RECONFIG_CHECK="false"
#ETCD_AUTO_COMPACTION_RETENTION="0"
#ETCD_ENABLE_V2="true"
#
#[proxy]
#ETCD_PROXY="off"
#ETCD_PROXY_FAILURE_WAIT="5000"
#ETCD_PROXY_REFRESH_INTERVAL="30000"
#ETCD_PROXY_DIAL_TIMEOUT="1000"
#ETCD_PROXY_WRITE_TIMEOUT="5000"
#ETCD_PROXY_READ_TIMEOUT="0"
#
#[security]
#ETCD_CERT_FILE=""
#ETCD_KEY_FILE=""
#ETCD_CLIENT_CERT_AUTH="false"
#ETCD_TRUSTED_CA_FILE=""
#ETCD_AUTO_TLS="false"
#ETCD_PEER_CERT_FILE=""
#ETCD_PEER_KEY_FILE=""
#ETCD_PEER_CLIENT_CERT_AUTH="false"
#ETCD_PEER_TRUSTED_CA_FILE=""
#ETCD_PEER_AUTO_TLS="false"
#
#[logging]
#ETCD_DEBUG="false"
# examples for -log-package-levels etcdserver=WARNING,security=DEBUG
#ETCD_LOG_PACKAGE_LEVELS=""
#
#[profiling]
#ETCD_ENABLE_PPROF="false"
#ETCD_METRICS="basic"
#
#[auth]
#ETCD_AUTH_TOKEN="simple"
2.2. 修改 /etc/kubernetes/apiserver文件
[root@server1 ~]# vi /etc/kubernetes/apiserver
###
# kubernetes system config
#
# The following values are used to configure the kube-apiserver
#
# The address on the local server to listen to.
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
# The port on the local server to listen on.
# KUBE_API_PORT="--port=8080"
# Port minions listen on
# KUBELET_PORT="--kubelet-port=10250"
# Comma separated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.1.101:2379"
# Address range to use for services
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
# default admission control policies
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
# Add your own!
KUBE_API_ARGS=""
2.3. 启动etcd服务
[root@server1 ~]# systemctl start etcd
[root@server1 ~]# etcdctl mkdir /kube-centos/network
[root@server1 ~]# etcdctl mk /kube-centos/network/config "{ \"Network\": \"172.30.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }"
{ "Network": "172.30.0.0/16", "SubnetLen": 24, "Backend": { "Type": "vxlan" } }
[root@server1 ~]#
2.4. 修改/etc/sysconfig/flanneld文件
[root@server1 ~]# vi /etc/sysconfig/flanneld
# Flanneld configuration options
# etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://192.168.1.101:2379"
# etcd config key. This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/kube-centos/network"
# Any additional options that you want to pass
#FLANNEL_OPTIONS=""
2.5. 重启各项服务
[root@server1 ~]# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler flanneld; do
> systemctl restart $SERVICES
> systemctl enable $SERVICES
> systemctl status $SERVICES
> done
Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.
● etcd.service - Etcd Server
Loaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2017-11-26 14:02:06 CST; 85ms ago
Main PID: 8273 (etcd)
CGroup: /system.slice/etcd.service
└─8273 /usr/bin/etcd --name=default --data-dir=/var/lib/etcd/default.etcd --listen-client-urls=http://0.0.0.0:2379
Nov 26 14:02:05 server1.smartmap.com etcd[8273]: enabled capabilities for version 3.2
Nov 26 14:02:06 server1.smartmap.com etcd[8273]: 8e9e05c52164694d is starting a new election at term 2
Nov 26 14:02:06 server1.smartmap.com etcd[8273]: 8e9e05c52164694d became candidate at term 3
Nov 26 14:02:06 server1.smartmap.com etcd[8273]: 8e9e05c52164694d received MsgVoteResp from 8e9e05c52164694d at term 3
Nov 26 14:02:06 server1.smartmap.com etcd[8273]: 8e9e05c52164694d became leader at term 3
Nov 26 14:02:06 server1.smartmap.com etcd[8273]: raft.node: 8e9e05c52164694d elected leader 8e9e05c52164694d at term 3
Nov 26 14:02:06 server1.smartmap.com etcd[8273]: published {Name:default ClientURLs:[http://0.0.0.0:2379]} to cluster cdf818194e3a8c32
Nov 26 14:02:06 server1.smartmap.com etcd[8273]: ready to serve client requests
Nov 26 14:02:06 server1.smartmap.com etcd[8273]: serving insecure client requests on [::]:2379, this is strongly discouraged!
Nov 26 14:02:06 server1.smartmap.com systemd[1]: Started Etcd Server.
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-apiserver.service to /usr/lib/systemd/system/kube-apiserver.service.
● kube-apiserver.service - Kubernetes API Server
Loaded: loaded (/usr/lib/systemd/system/kube-apiserver.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2017-11-26 14:02:07 CST; 48ms ago
Docs: https://github.com/GoogleCloudPlatform/kubernetes
Main PID: 8307 (kube-apiserver)
CGroup: /system.slice/kube-apiserver.service
└─8307 /usr/bin/kube-apiserver --logtostderr=true --v=0 --etcd-servers=http://192.168.1.101:2379 --address=0.0.0.0 --allow-privileged=...
Nov 26 14:02:07 server1.smartmap.com kube-apiserver[8307]: I1126 14:02:07.184106 8307 storage_rbac.go:131] Created clusterrole.rbac.auth.../admin
Nov 26 14:02:07 server1.smartmap.com kube-apiserver[8307]: I1126 14:02:07.189141 8307 storage_rbac.go:131] Created clusterrole.rbac.auth...o/edit
Nov 26 14:02:07 server1.smartmap.com kube-apiserver[8307]: I1126 14:02:07.191558 8307 storage_rbac.go:131] Created clusterrole.rbac.auth...o/view
Nov 26 14:02:07 server1.smartmap.com kube-apiserver[8307]: I1126 14:02:07.194588 8307 storage_rbac.go:131] Created clusterrole.rbac.auth...m:node
Nov 26 14:02:07 server1.smartmap.com kube-apiserver[8307]: I1126 14:02:07.197275 8307 storage_rbac.go:131] Created clusterrole.rbac.auth...roxier
Nov 26 14:02:07 server1.smartmap.com kube-apiserver[8307]: I1126 14:02:07.202016 8307 storage_rbac.go:131] Created clusterrole.rbac.auth...roller
Nov 26 14:02:07 server1.smartmap.com kube-apiserver[8307]: I1126 14:02:07.206863 8307 storage_rbac.go:151] Created clusterrolebinding.rb...-admin
Nov 26 14:02:07 server1.smartmap.com kube-apiserver[8307]: I1126 14:02:07.208544 8307 storage_rbac.go:151] Created clusterrolebinding.rb...covery
Nov 26 14:02:07 server1.smartmap.com kube-apiserver[8307]: I1126 14:02:07.212371 8307 storage_rbac.go:151] Created clusterrolebinding.rb...c-user
Nov 26 14:02:07 server1.smartmap.com kube-apiserver[8307]: I1126 14:02:07.214597 8307 storage_rbac.go:151] Created clusterrolebinding.rb...m:node
Hint: Some lines were ellipsized, use -l to show in full.
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-controller-manager.service to /usr/lib/systemd/system/kube-controller-manager.service.
● kube-controller-manager.service - Kubernetes Controller Manager
Loaded: loaded (/usr/lib/systemd/system/kube-controller-manager.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2017-11-26 14:02:07 CST; 73ms ago
Docs: https://github.com/GoogleCloudPlatform/kubernetes
Main PID: 8339 (kube-controller)
CGroup: /system.slice/kube-controller-manager.service
└─8339 /usr/bin/kube-controller-manager --logtostderr=true --v=0 --master=http://192.168.1.101:8080
Nov 26 14:02:07 server1.smartmap.com systemd[1]: Started Kubernetes Controller Manager.
Nov 26 14:02:07 server1.smartmap.com systemd[1]: Starting Kubernetes Controller Manager...
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-scheduler.service to /usr/lib/systemd/system/kube-scheduler.service.
● kube-scheduler.service - Kubernetes Scheduler Plugin
Loaded: loaded (/usr/lib/systemd/system/kube-scheduler.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2017-11-26 14:02:07 CST; 79ms ago
Docs: https://github.com/GoogleCloudPlatform/kubernetes
Main PID: 8371 (kube-scheduler)
CGroup: /system.slice/kube-scheduler.service
└─8371 /usr/bin/kube-scheduler --logtostderr=true --v=0 --master=http://192.168.1.101:8080
Nov 26 14:02:07 server1.smartmap.com systemd[1]: Started Kubernetes Scheduler Plugin.
Nov 26 14:02:07 server1.smartmap.com systemd[1]: Starting Kubernetes Scheduler Plugin...
Created symlink from /etc/systemd/system/multi-user.target.wants/flanneld.service to /usr/lib/systemd/system/flanneld.service.
Created symlink from /etc/systemd/system/docker.service.requires/flanneld.service to /usr/lib/systemd/system/flanneld.service.
● flanneld.service - Flanneld overlay address etcd agent
Loaded: loaded (/usr/lib/systemd/system/flanneld.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2017-11-26 14:02:07 CST; 44ms ago
Main PID: 8402 (flanneld)
CGroup: /system.slice/flanneld.service
└─8402 /usr/bin/flanneld -etcd-endpoints=http://192.168.1.101:2379 -etcd-prefix=/kube-centos/network
Nov 26 14:02:07 server1.smartmap.com systemd[1]: Starting Flanneld overlay address etcd agent...
Nov 26 14:02:07 server1.smartmap.com flanneld-start[8402]: I1126 14:02:07.432091 8402 main.go:132] Installing signal handlers
Nov 26 14:02:07 server1.smartmap.com flanneld-start[8402]: I1126 14:02:07.433596 8402 manager.go:136] Determining IP address of default interface
Nov 26 14:02:07 server1.smartmap.com flanneld-start[8402]: I1126 14:02:07.433830 8402 manager.go:149] Using interface with name ens33 an....1.101
Nov 26 14:02:07 server1.smartmap.com flanneld-start[8402]: I1126 14:02:07.433841 8402 manager.go:166] Defaulting external address to int...1.101)
Nov 26 14:02:07 server1.smartmap.com flanneld-start[8402]: I1126 14:02:07.505878 8402 local_manager.go:179] Picking subnet in range 172.....255.0
Nov 26 14:02:07 server1.smartmap.com flanneld-start[8402]: I1126 14:02:07.506878 8402 manager.go:250] Lease acquired: 172.30.47.0/24
Nov 26 14:02:07 server1.smartmap.com flanneld-start[8402]: I1126 14:02:07.507064 8402 network.go:58] Watching for L3 misses
Nov 26 14:02:07 server1.smartmap.com flanneld-start[8402]: I1126 14:02:07.507071 8402 network.go:66] Watching for new subnet leases
Nov 26 14:02:07 server1.smartmap.com systemd[1]: Started Flanneld overlay address etcd agent.
Hint: Some lines were ellipsized, use -l to show in full.
[root@server1 ~]#
3. 配置Container Node
3.1. 修改 /etc/kubernetes/kubelet文件
[root@server2 sysconfig]# vi /etc/kubernetes/kubelet
###
# kubernetes kubelet (minion) config
# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
KUBELET_ADDRESS="--address=0.0.0.0"
# The port for the info server to serve on
# KUBELET_PORT="--port=10250"
# You may leave this blank to use the actual hostname
KUBELET_HOSTNAME="--hostname-override=server2.smartmap.com"
# location of the api-server
KUBELET_API_SERVER="--api-servers=http://server1.smartmap.com:8080"
# pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
# Add your own!
KUBELET_ARGS=""
3.2. 修改 /etc/sysconfig/flanneld文件
[root@server2 sysconfig]# vi /etc/sysconfig/flanneld
# Flanneld configuration options
# etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://server1.smartmap.com:2379"
# etcd config key. This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/kube-centos/network"
# Any additional options that you want to pass
#FLANNEL_OPTIONS=""
3.3. 重启各项服务
[root@server2 sysconfig]# for SERVICES in kube-proxy kubelet flanneld docker; do
> systemctl restart $SERVICES
> systemctl enable $SERVICES
> systemctl status $SERVICES
> done
3.4. 配置kubectl
[root@server2 sysconfig]# kubectl config set-cluster default-cluster --server=http://server1.smartmap.com:8080
Cluster "default-cluster" set.
[root@server2 sysconfig]# kubectl config set-context default-context --cluster=default-cluster --user=default-admin
Context "default-context" set.
[root@server2 sysconfig]# kubectl config use-context default-context
Switched to context "default-context".
[root@server2 sysconfig]#
4. 检查集群
[root@server1 ~]# kubectl get nodes
NAME STATUS AGE
server2.smartmap.com Ready 10m
server3.smartmap.com Ready 1m
server4.smartmap.com Ready 1m
[root@server1 ~]#
5. 创建Pod
5.1. 创建镜像
5.1.1. 编辑Dockerfile文件
[root@server2 ~]# vi Dockerfile
# create new
FROM centos
MAINTAINER smartmap <admin@smartmap.com>
RUN yum -y install httpd
RUN echo "Hello DockerFile" > /var/www/html/index.html
EXPOSE 80
CMD ["-D", "FOREGROUND"]
ENTRYPOINT ["/usr/sbin/httpd"]
5.1.2. 生成镜像
[root@server2 ~]# docker build -t web_server:latest .
Sending build context to Docker daemon 44.54 kB
Step 1 : FROM centos
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
85432449fd0f: Pull complete
Digest: sha256:3b1a65e9a05f0a77b5e8a698d3359459904c2a354dc3b25ae2e2f5c95f0b3 667
---> 3fa822599e10
Step 2 : MAINTAINER smartmap <admin@smartmap.com>
---> Running in 2d8746184cda
---> 0e1a78adcae3
5.1.3. 查看所有镜像
[root@server2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
web_server latest 79a12844f0fc 4 minutes ago 316 MB
docker.io/centos latest 3fa822599e10 3 days ago 203.5 MB
5.2. 导出镜像
[root@server2 ~]# docker save web_server > web_server.tar
5.3. 将生成的镜像复制到其它所有节点
[root@server2 ~]# scp web_server.tar server3.smartmap.com:/root/web_server.tar
The authenticity of host 'server3.smartmap.com (192.168.1.103)' can't be established.
ECDSA key fingerprint is SHA256:lgN0eOtdLR2eqHh+fabe54DGpV08ZiWo9oWVS60aGzw.
ECDSA key fingerprint is MD5:28:c0:cf:21:35:29:3d:23:d3:62:ca:0e:82:7a:4b:af.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server3.smartmap.com,192.168.1.103' (ECDSA) to the list o f known hosts.
root@server3.smartmap.com's password:
web_server.tar 100% 310MB 25.8MB/s 00:12
[root@server2 ~]# scp web_server.tar server4.smartmap.com:/root/web_server.tar
The authenticity of host 'server4.smartmap.com (192.168.1.104)' can't be established.
ECDSA key fingerprint is SHA256:lgN0eOtdLR2eqHh+fabe54DGpV08ZiWo9oWVS60aGzw.
ECDSA key fingerprint is MD5:28:c0:cf:21:35:29:3d:23:d3:62:ca:0e:82:7a:4b:af.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server4.smartmap.com,192.168.1.104' (ECDSA) to the list o f known hosts.
root@server4.smartmap.com's password:
web_server.tar 100% 310MB 28.2MB/s 00:11
[root@server2 ~]#
5.4. 其它Container Node节点导入镜像
[root@server3 ~]# ll
total 317660
-rw-------. 1 root root 1496 Oct 28 11:32 anaconda-ks.cfg
-rw-r--r-- 1 root root 325278208 Dec 3 16:59 web_server.tar
[root@server3 ~]# docker load < web_server.tar
d1be66a59bc5: Loading layer 212.1 MB/212.1 MB
73c74fffa4a1: Loading layer 113.2 MB/113.2 MB
8c78557d73da: Loading layer 3.584 kB/3.584 kB
Loaded image: web_server:latest
[root@server3 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
web_server latest 79a12844f0fc 16 minutes ago 316 MB
[root@server3 ~]#
5.5. 在Admin Node上创建Pod
5.5.1. 创建pod-webserver.yaml文件
[root@server1 ~]# vi pod-webserver.yaml
apiVersion: v1
kind: Pod
metadata:
name: httpd
labels:
app: web_server
spec:
containers:
- name: httpd
image: web_server
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
5.5.2. 创建Pod
[root@server1 ~]# kubectl create -f pod-webserver.yaml
pod "httpd" created
[root@server1 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
httpd 0/1 ContainerCreating 0 12s <none> server4.smartmap.com
[root@server1 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
httpd 1/1 Running 0 7s 172.30.20.2 server4.smartmap.com
[root@server1 ~]# kubectl get pod httpd -o yaml | grep "podIP"
podIP: 172.30.20.2
[root@server1 ~]# curl http://172.30.20.2
Hello DockerFile
5.5.3. 删除Pod
[root@server1 ~]# kubectl delete pod httpd
pod "httpd" deleted
[root@server1 ~]#
5.5.4. 处理相关问题
1. open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory
[root@server2 ~]# yum install *rhsm*
Loaded plugins: fastestmirror
base | 3.6 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
virt7-docker-common-release | 3.4 kB 00:00:00
(1/2): extras/7/x86_64/primary_db | 130 kB 00:00:00
(2/2): updates/7/x86_64/primary_db | 3.6 MB 00:00:00
Loading mirror speeds from cached hostfile
* base: mirrors.tuna.tsinghua.edu.cn
2.returned error: No such image: registry.access.redhat.com/rhel7/pod-infrastructure:latest
[root@server2 ~]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
Trying to pull repository registry.access.redhat.com/rhel7/pod-infrastructure ...
latest: Pulling from registry.access.redhat.com/rhel7/pod-infrastructure
26e5ed6899db: Downloading 16.35 MB/74.87 MB
26e5ed6899db: Pull complete
66dbe984a319: Pull complete
9138e7863e08: Pull complete
Digest: sha256:92d43c37297da3ab187fc2b9e9ebfb243c1110d446c783ae1b989088495db931
[root@server2 ~]#
6. 持久化存贮
6.1. 创建pod-webserver.yaml文件
[root@server1 ~]# vi pod-webserver-storage.yaml
apiVersion: v1
kind: Pod
metadata:
name: httpd
spec:
containers:
- name: httpd
imagePullPolicy: IfNotPresent
image: web_server
ports:
- containerPort: 80
volumeMounts:
# the volume to use (it's the one defined in "volumes" section)
- name: httpd-storage
# mount point inside Container
mountPath: /var/www/html
volumes:
# any name you like
- name: httpd-storage
hostPath:
# the directory on Host Node for saving data
path: /var/docker/disk01
6.2. 在所有Node上创建目录
[root@server2 ~]# mkdir -p /var/www/html
[root@server2 ~]# mkdir -p /var/docker/disk01
6.3. 创建Pod
[root@server1 ~]# kubectl create -f pod-webserver-storage.yaml
pod "httpd" created
[root@server1 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
httpd 1/1 Running 0 14s 172.30.49.2 server3.smartmap.com
[root@server1 ~]# kubectl get pod httpd -o yaml | grep "podIP"
podIP: 172.30.49.2
6.4. 修改内容
[root@server3 ~]# echo "Persistent Storage" > /var/docker/disk01/index.html
[root@server3 ~]# curl http://172.30.49.2
Persistent Storage