一、基础环境准备
1.1 环境准备
操作系统:Linux Centos
主机名 | 安装的软件 |
---|---|
k8s-master | kube-apiserver、kube-controller-manager、kube-scheduler |
k8s-node-1 | kubelet、kube-proxy、docker |
k8s-node-2 | kubelet、kube-proxy、docker |
1.2 安装lszrz
链接:https://pan.baidu.com/s/1e2KCTnnU0dy6y6zA9vlsLw
提取码:qi9j
第一步:解压缩lrzsz-0.12.20包;
tar zxvf lrzsz-0.12.20.tar.gz
第二步:配置安装路径;
cd lrzsz-0.12.20/
./configure --prefix=/usr/local/lrzsz
第三步:编译和安装;
make & make install
第四步:创建软链接;
cd /usr/bin
ln -s /usr/local/lrzsz/bin/lrz rz
ln -s /usr/local/lrzsz/bin/lsz sz
1.3 在Node节点上安装Docker
链接:https://pan.baidu.com/s/1gHKUMyDohAeBDF0JCWKZJA
提取码:ua6g
第一步:安装docker依赖包;
yum localinstall audit-libs-python-2.7.6-3.el7.x86_64.rpm -y
yum localinstall checkpolicy-2.5-4.el7.x86_64.rpm -y
yum localinstall libcgroup-0.41-13.el7.x86_64.rpm -y
yum localinstall libsemanage-python-2.5-8.el7.x86_64.rpm -y
yum localinstall libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm -y
yum localinstall python-IPy-0.75-6.el7.noarch.rpm -y
yum localinstall setools-libs-3.3.8-1.1.el7.x86_64.rpm -y
yum localinstall policycoreutils-python-2.5-17.1.el7.x86_64.rpm -y
yum localinstall container-selinux-2.19-2.1.el7.noarch.rpm -y
yum localinstall docker-ce-17.12.0.ce-1.el7.centos.x86_64.rpm -y
第二步:编辑/etc/docker/daemon.json文件;
{
"insecure-registries":[],
"hosts": ["unix:///var/run/docker.sock"],
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"],
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "10"
},
"live-restore": true
}
第三步:重启一下docker服务;
systemctl daemon-reload
systemctl restart docker
二、部署master节点
2.1 安装etcd
链接:https://pan.baidu.com/s/1mlC0oOQ1z6Ddu8fbyHcEGQ
提取码:teqx
第一步:解压缩etcd-v3.3.9-linux-amd64.tar.gz;
tar zxvf etcd-v3.3.9-linux-amd64.tar.gz
第二步:解压后将etcdctl、etcd复制/usr/bin目录下;
cd etcd-v3.3.9-linux-amd64
mv etcdctl etcd /usr/bin
第三步:编辑/usr/lib/systemd/system/etcd.service文件;
[Unit]
Description=Etcd Server
After=network.target
[Service]
Type=notify
EnvironmentFile=-/etc/etcd/etcd.conf
WorkingDirectory=/var/lib/etcd/
ExecStart=/usr/bin/etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2389
Restart=on-failure
[Install]
WantedBy=multi-user.target
第四步:启动etcd服务;
systemctl daemon-reload
systemctl start etcd
systemctl status etcd
systemctl enable etcd
第五步:检查etcd集群状态;
etcdctl cluster-health
2.2 安装k8s
链接:https://pan.baidu.com/s/1bL5w5Z_QGp-dvnoQeaNX7Q
提取码:dr3c
在k8s-master节点上安装K8S的步骤:
第一步:解压缩kubernetes-server-linux-amd64.tar.gz;
第二步:进入/kubernetes/server/bin目录,将kube-apiserver、kube-controller-manager、kube-scheduler、kubectl执行文件复制到/usr/bin目录下;
第三步:配置kube-apiserver、kube-controller-manager、kube-scheduler服务;
2.2.1 配置kube-apiserver
- 定义kube-apiserver服务:
vi /usr/lib/systemd/system/kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
After=etcd.service
Wants=etcd.service
[Service]
EnvironmentFile=/etc/kubernetes/apiserver
ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
Restart=on-failure
Type=notify
[Install]
WantedBy=multi-user.target
- 定义kube-apiserver的参数配置信息:
mkdir /etc/kubernetes
vi /etc/kubernetes/apiserver
KUBE_API_ARGS="--storage-backend=etcd3 --etcd-servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --service-cluster-ip-range=169.169.0.0/16 --service-node-port-range=1-65535 --admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,DefaultStorageClass,ResourceQuota --logtostderr=true --log-dir=/var/log/kubernetes --v=2"
2.2.2 配置kube-controller-manager
- 定义kube-controller-manager服务:
vi /usr/lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=-/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
- 定义kube-controller-manager的参数配置信息:
vi /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS="--master=http://k8s-master:8080 --logtostderr=true --log-dir=/var/log/kubernetes --v=2"
2.2.3 配置kube-scheduler
- 定义kube- scheduler服务:
vi /usr/lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=-/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
- 定义kube-scheduler的参数配置信息:
vi /etc/kubernetes/scheduler
KUBE_SCHEDULER_ARGS="--master=http://k8s-master:8080 --logtostderr=true --log-dir=/var/log/kubernetes --v=2"
服务配置完成后,启动所有服务,并设置开机自启动:
systemctl daemon-reload
systemctl start kube-apiserver kube-controller-manager kube-scheduler
systemctl status kube-apiserver kube-controller-manager kube-scheduler
systemctl enable kube-apiserver kube-controller-manager kube-scheduler
三、部署node节点
3.1 安装k8s
在node节点上部署k8s也是按照下面三个步骤:
第一步:解压缩kubernetes-server-linux-amd64.tar.gz;
第二步:2) 进入将kubernetes/server/bin目录,将kubelet、kube-proxy执行文件复制到/usr/bin目录下;
第三步:3) 配置kubelet、kube-proxy服务;
3.1.1 配置kubelet
- 定义kubelet服务:
vi /usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service
[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/kubernetes/kubelet
ExecStart=/usr/bin/kubelet $KUBELET_ARGS
Restart=on-failure
KillMode=process
[Install]
WantedBy=multi-user.target
- 定义kubelet的参数配置信息:
mkdir -p /var/lib/kubelet
mkdir -p /etc/kubernetes
vi /etc/kubernetes/kubelet
KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig --hostname-override=k8s-node-1 --logtostderr=true --log-dir=/var/log/kubernetes --v=2 --fail-swap-on=false"
上面--hostname-override
参数指定当前node节点所在主机IP地址或主机名。
- 配置kubelet连接apiserver的参数信息:
vi /etc/kubernetes/kubeconfig
apiVersion: v1
kind: Config
clusters:
- cluster:
server: http://k8s-master:8080
name: local
contexts:
- context:
cluster: local
name: mycontext
current-context: mycontext
3.1.2 配置kube-proxy
- 定义kube-proxy服务:
vi /usr/lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Kube-proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.service
Requires=network.service
[Service]
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536
KillMode=process
[Install]
WantedBy=multi-user.target
- 定义kube-proxy的参数配置信息:
vi /etc/kubernetes/proxy
KUBE_PROXY_ARGS="--master=http://k8s-master:8080 --hostname-override=k8s-node-1 --logtostderr=true --log-dir=/var/log/kubernetes --v=2"
上面--hostname-override
参数指定当前node节点所在主机IP地址或主机名。
所有服务配置完成后,启动所有服务,并设置开机自启动:
systemctl daemon-reload
systemctl start kubelet kube-proxy
systemctl status kubelet kube-proxy
systemctl enable kubelet kube-proxy
3.2 集群健康检查
在master节点上执行命令:
四、安装基础镜像
4.1 安装centos7-orcalejdk8
因为项目启动时候需要jdk环境,所以需要在node节点上提前准备好centos7-oraclejdk8.tar镜像。
cd /root/k8s/imags/
docker load < centos7-oraclejdk8.tar
docker images
docker tag [镜像ID] centos7-orcalejdk8:v1
注意:执行docker load
命令可能会引起下面错误:
可以改为以下命令:
cat [镜像压缩包] | docker import – [image_name:tag]
4.2 pause-amd64
链接:https://pan.baidu.com/s/1fWeUr7SQ4qPaijlCDs8vhw
提取码:37h5
pause-amd64是Kubernetes基础设施的一部分,用于实现Kubernetes集群里pod之间的网络通讯,所以需要在node节点上安装pause-amd64镜像。
docker load < pause-amd64.tar
docker images
docker tag [镜像ID] gcr.io/google_containers/pause-amd64:3.0
执行效果:
值得注意的是,上面gcr.io/google_containers/pause-amd64镜像名称不能够是其他名称。
五、集群测试
1)先准备一个web项目,然后将其打包,并上传到k8s-node-1和k8s-node-2节点的某个目录下。
2)在该目录下新建Dockerfile文件,文件内容如下:
FROM centos7-orcalejdk8:v1
ENV CSMBP_SLEEP 0
ADD *.war /app.war
RUN sh -c 'touch /app.war'
VOLUME /tmp
EXPOSE 8081
CMD echo "The application will start in ${CSMBP_SLEEP}s..." && \
sleep ${CSMBP_SLEEP} && \
java -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8 -jar /app.war
上面EXPOSE
参数指定将web应用的8081端口和主机的8081端口进行映射,这样客户端就能够通过该端口访问web服务。
3)执行docker build
命令打包镜像:
docker build -t [镜像名:版本号] .
4)编写项目的部署文件:
apiVersion: v1
kind: ReplicationController
metadata:
name: web-rc
spec:
replicas: 1
selector:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: 镜像名:版本号
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8081
---
apiVersion: v1
kind: Service
metadata:
name: web-svc
spec:
selector:
app: web
type: NodePort
ports:
- port: 8081
targetPort: 8081
nodePort: 30081
5)执行部署操作:
kubectl apply –f web.yaml
到目前为止,我们的K8S基础环境搭建已经完成。接下来是K8S环境相关插件的安装(私有仓库、仪表盘等等)。