首先介绍一下K8S是什么:(引用自K8S中文社区)
Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
通过Kubernetes你可以:
-
快速部署应用
-
快速扩展应用
-
无缝对接新的应用功能
-
节省资源,优化硬件资源的使用
其实K8S能够做的事情有很多,而且操作简单,十分方便,下面先介绍如何安装,然后是对于pod详细介绍,如果你对docker还不怎么了解,可以先参考前面的文章学习一下!
环境介绍:
CentOS 7.2
Kubernetes 1.5.2
docker 1.12.1
一.安装配置
1.安装K8S
yum -y install kubernetes
这个命令会同时安装kube-apiserver,kube-controller-manager,kubelet,kube-proxy,kube-scheduler
2.更改服务器端设置
vim /etc/kubernetes/apiserver
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
|
###
# 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=127.0.0.1"
KUBE_API_ADDRESS=
"--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://127.0.0.1:2379"
# Address range to use for services
#KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_SERVICE_ADDRESSES=
"--portal_net=10.254.0.0/16"
# default admission control policies
#KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
KUBE_ADMISSION_CONTROL=
"--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
# Add your own!
KUBE_API_ARGS=
""
|
vim /etc/kubernetes/controller-manager #指定客户端主机的ip地址
1
|
KUBELET_ADDRESSES=
"--machines= 192.168.6.109"
|
vim /etc/kubernetes/kubelet #这个镜像是k8s构建pod必备镜像,如果不能从默认位置下载可以先在私库中单独下载这个镜像,这里6.109是一个私库
1
2
|
#KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_POD_INFRA_CONTAINER=
"--pod-infra-container-image=192.168.6.109:5000/pod-infrastructure:latest"
|
3.启动相关服务
systemctl start kube-apiserver kube-controller-manager kubelet kube-proxy kube-scheduler
4.在pod创建过程中如果想让docker从私库中拉取镜像,同样需要去掉相关证书验证
vim /etc/docker/daemon.json
1
|
{
"insecure-registries"
:[
"192.168.6.109:5000"
]
|
5.重启docker服务
systemctl restart docker
二.节点(Node)安装
1.安装K8S
yum -y install kubernetes
2.更改节点(Node)设置
vim /etc/kubernetes/apiserver
1
2
|
KUBE_ETCD_SERVERS="--etcd-servers=
KUBE_API_ADDRESS=
"--insecure-bind-address=192.168.6.200"
|
vim /etc/kubernetes/config
1
|
KUBE_MASTER=
"--master=http://192.168.6.200:8080"
|
vim /etc/kubernetes/kubelet
1
2
3
|
KUBELET_ADDRESS=
"--address=0.0.0.0"
KUBELET_HOSTNAME=
"--hostname-override=192.168.6.109"
KUBELET_API_SERVER=
"--api-servers=http://192.168.6.200:8080"
|
3.启动相关服务,节点端必须开放10250端口
systemctl start kubelet kube-proxy
4.查看节点是否正常,在服务器端执行
kubectl get node #此时应该存在2个节点,一个本机,一个节点
二.Pod是个什么东西
在K8S中,Pod是创建或部署的最小/最简单的基本单位,一个Pod是由多个Docker容器组成的容器组
如图所示,每个pod包含至少一个标签,标签的形式是key:value,这样可以更快地匹配到对应的pod,service主要的功能是暴露pod对应的端口,或是做负载均衡使用!下一节再详细讨论service的用法。
1.Pod应用实例
vim obj.json
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
32
33
34
35
|
{
"kind"
:
"Pod"
,
#类型,独立的Pod
"apiVersion"
:
"v1"
,
#API版本
"metadata"
: {
"name"
:
"podtest"
,
#pod名称
"labels"
: {
"name"
:
"nginx-server"
#标签
}
},
"spec"
: {
"containers"
:[{
"name"
:
"master1"
,
#第一个容器的名称
"image"
:
"nginx"
,
#使用的镜像
"ports"
:[{
"containerPort"
:
80
,
#容器内的端口
"hostPort"
:
8811
#映射的主机端口
}],
"volumeMounts"
: [{
#数据卷
"mountPath"
:
"/var/log/nginx"
,
#容器内的目录
"name"
:
"nginx-conf"
#数据卷名称
}]
},{
"name"
:
"master2"
,
#第二个容器的名称
"image"
:
"redis"
,
"ports"
:[{
"containerPort"
:
6379
,
"hostPort"
:
7480
}]
}],
"volumes"
: [{
"name"
:
"nginx-conf"
,
#对应上面的数据卷名称
"emptyDir"
: {}
#本地挂载目录,这里是空目录,路径在/$K8S安装路径/pkg/volume/empty_dir
}]
}
}
|
2.创建这个Pod
kubectl create -f obj.json
pod "podtest" created
3.查看已经创建的Pod
kubectl get pod
如果提示有2个正在运行则为正常,如果不是,可以查看具体错误日志
4.查看Pod运行日志
kubectl logs podtest master1/master2
5.查看创建pod的细节
kubectl describe pod podtest
6.在节点上查看容器创建情况
docker ps
可以看到一共创建了3个容器,第三个容器提供网络和端口支持,上面两个分别提供nginx和redis服务,这时如果访问curl 192.168.6.109:8811 则会出现预先设置好的页面!
7.pod删除
如果想修改其中的配置,则需要先删除pod再进行创建
kubectl delete -f obj.json
kubectl delete pod podtest
8.扩展查询
kubectl get pod -o wide
可以得到Pod的运行ip,节点使用情况