离线手动搭建K8S集群实践

一、基础环境准备

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环境相关插件的安装(私有仓库、仪表盘等等)。

猜你喜欢

转载自blog.csdn.net/zhongliwen1981/article/details/121614653
今日推荐