前置要求(pre-required):

系统redhat7.x
swap永久关闭(当前状态也要关闭)
CPU/内存至少2C4G
dns条目

在/etc/hosts文件中加入主机名以及ip的对应关系

 

主机的信息如下:

主机名ip操作系统主机类型
k8s-master10.0.199.1contOS7.7.1908虚拟机

 

前言:先看第五步,我发现docker的安装没写。临时补上,先看docker安装,不然k8s是启动不起来的。

 

第一步:安装master服务需要的etcd服务

下载地址: https://github.com/etcd-io/etcd/releases/download/v3.3.18/etcd-v3.3.18-linux-amd64.tar.gz

第1.1小步:安装,配置,起服务

#解压,配置,启动三步曲走起
[root@k8s-master ~]# tar xvf etcd-v3.3.18-linux-amd64.tar.gz
[root@k8s-master ~]# cd etcd-v3.3.18-linux-amd64/
[root@k8s-master etcd-v3.3.18-linux-amd64]# mv etcd etcdctl /usr/bin/
[root@k8s-master etcd-v3.3.18-linux-amd64]# mkdir /var/lib/etcd/
[root@k8s-master etcd-v3.3.18-linux-amd64]# mkdir /etc/etcd/
#下面这个配置文件是为systemd服务的,看最后一个文件的内容就知道了
[root@k8s-master etcd-v3.3.18-linux-amd64]# cat  > /etc/etcd/etcd.conf <<-EOF
#[Member]
ETCD_NAME="etcd01"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_CLIENT_URLS="http://10.0.199.1:2379"

#[Clustering]
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.199.1:2379"

EOF

#下面这个是systemd中etcd的启动配置文件,配置完之后就可以用systemd启停etc服务了
[root@k8s-master etcd-v3.3.18-linux-amd64]# cat > /usr/lib/systemd/system/etcd.service <<-EOF
[Unit]
Description=Etcd Server
After=network.target

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd

[Install]
WantedBy=multi-user.target

EOF

第1.2小步:检查服务启动是否正常

#设置变量值
[root@k8s-master etcd-v3.3.18-linux-amd64]# etcdctl --endpoints http://10.0.199.1:2379 set MYISGOD "hahahaha"
hahahaha
#输出变量值
[root@k8s-master etcd-v3.3.18-linux-amd64]# etcdctl --endpoints http://10.0.199.1:2379 get MYISGOD "hahahaha"
hahahaha
#检查集群状态
[root@k8s-master etcd-v3.3.18-linux-amd64]# etcdctl --endpoints http://10.0.199.1:2379 cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://10.0.199.1:2379
cluster is healthy

为啥要检查集群状态 ?我也就多余玩一下这个命令,只要上面的两个命令成功即可,后期可能要搭建etcd多机部署的集群,所以就练手一下,可以忽略

第1.3小步,总结

以上到此为止,etcd配置就完成了,小白应该能看懂吧~ ,中间需要理解的也就是etcd的配置文件怎么被由systemd启停控制的etcd来识别的。上面systemd的配置看懂了,也就明白了;还有etcd的那个配置文件里面的ip注意点,要用你自己的主机的ip地址。看下一步把。

第二步:安装master服务需要的kube-apiserver服务

下载地址:https://dl.k8s.io/v1.17.0/kubernetes-server-linux-amd64.tar.gz
这个包里面还有kube-scheduler和kube-controller-manager的启动程序,后面的两步就是配这两个,先来看kube-apiserver

第1.1小步 安装,配置起,服务,老套路走起

[root@k8s-master ~]# mkdir k8s-1.17.0/ ;cd k8s-1.17.0/
[root@k8s-master k8s-1.17.0]# wget https://dl.k8s.io/v1.17.0/kubernetes-server-linux-amd64.tar.gz
[root@k8s-master k8s-1.17.0]# tar xf kubernetes-server-linux-amd64.tar.gz
[root@k8s-master k8s-1.17.0]# mv kubernetes kubernetes-server
[root@k8s-master k8s-1.17.0]# cd kubernetes-server/server/bin/
[root@k8s-master bin]# cp -p kube-apiserver /usr/bin/
[root@k8s-master bin]# cat > /usr/lib/systemd/system/kube-apiserver.service <<-EOF
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/GooglePlatform/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
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

[root@k8s-master bin]# mkdir /etc/kubernetes
[root@k8s-master bin]# mkdir /var/log/kubernetes
[root@k8s-master bin]# cat > /etc/kubernetes/apiserver <<-EOF
KUBE_API_ARGS="--etcd-servers=http://10.0.199.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 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota  --logtostderr=false --log-dir=/var/log/kubernetes --v=0"
EOF
[root@k8s-master bin]# systemctl daemon-reload
[root@k8s-master bin]# systemctl enable kube-apiserver
[root@k8s-master bin]# systemctl start  kube-apiserver

第2.2小步,检查是否启动正常

使用 systemctl status kube-apiserver -l 来看这个服务的状态是怎么样的,如果有以外,最好结合/var/log/message的输出以及,它的配置文件中的参数指定的日志路径下查看它生成的日志,然后排查问题

第2.3小步,总结

        其实可以看到需要配置的apiserver这个文件里面放的就是kube-apiserver需要的参数信息了,也就是由于它的参数太多就用一个文件来存放,为了实现以后参数改变的方便性,如果没有指出来的参数都会使用默认值。
       还有就是注意这个配置文件中的etc的地址,关于参数的具体含义,可以参考这个地址的内容:https://my.oschina.net/u/3797264/blog/2250066

第三步:安装master服务需要的kube-controller-manager服务

配置过程和上面的一样,就是参数不一样。我贴出来

第3.1小步:安装配置起服务

[root@k8s-master bin]# cp -p kube-controller-manager /usr/bin/
[root@k8s-master bin]# cat > /usr/lib/systemd/system/kube-controller-manager.service <<-EOF
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleDloudPlatform/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
EOF
[root@k8s-master bin]# cat > /etc/kubernetes/controller-manager << -EOF
KUBE_CONTROLLER_MANAGER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig --logtostderr=false --log-dir=/var/log/kubernetes --v=0"
EOF
[root@k8s-master bin]# systemctl daemon-reload
[root@k8s-master bin]# systemctl enable kube-controller-manager
[root@k8s-master bin]# systemctl start kube-controller-manager

第3.2小步:测试

说句实在的,在启动的时候,打开/var/log/message 看它的执行数据,觉得没问题,然后使用systemctl status kube-controller-manager 看一下是否正常,基本就没啥问题了。

第 3.3小步:总结

这个服务是要依赖于kube-apiserver的,所以kube-apiserver必须要先正常启动,然后才能是它。这个配置里面只要不是特殊化定制,要改的内容其实没有,就按照我的来就可以了。

第4步:安装master服务需要的kube-scheduler服务

过程和上面两大步一样

第4.1小步:安装配置起服务

[root@k8s-master bin]# cp -p kube-scheduler /usr/bin/
[root@k8s-master bin]# cat > /usr/lib/systemd/system/kube-scheduler.service <<-EOF
[Unit]
Description=Kubernetes Controller Manager
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
EOF
[root@k8s-master bin]# cat > /etc/kubernetes/scheduler <<-EOF
KUBE_SCHEDULER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig --logtostderr=false --log-dir=/var/log/kubernetes --v=0"
EOF
[root@k8s-master bin]# systemctl daemon-reload
[root@k8s-master bin]# systemctl enable kube-scheduler
[root@k8s-master bin]# systemctl start kube-scheduler

第4.2小步:测试

说句实在的,在启动的时候,打开/var/log/message 看它的执行数据,觉得没问题,然后使用systemctl status kube-scheduler 看一下是否正常,基本就没啥问题了。

第 4.3小步:总结

这个服务也是要依赖于kube-apiserver的,所以kube-apiserver必须要先正常启动,然后才能是它。这个配置里面只要不是特殊化定制,要改的内容其实没有,就按照我的来就可以了。

第5步:安装容器

注:k8s1.17.x支持使用containerd或者cri-o或者dockerd去使用容器,我把三种都写一遍,注意,新手直接安装启动docker就好,前两者等有概念在搞,省得被额外折磨。
    第一种:所有node节点都安装docker(我说的node是工作节点,master节点可以装也可以不装,建议不装,本文讲的是单机节点,所以也就一台主机,所以就把master节点上安装上docker吧)

# Install Docker CE
## Set up the repository
### Install required packages.
yum install yum-utils device-mapper-persistent-data lvm2

### Add Docker repository.
yum-config-manager --add-repo \
  https://download.docker.com/linux/centos/docker-ce.repo

## Install Docker CE.
yum update && yum install \
  containerd.io-1.2.10 \
  docker-ce-19.03.4 \
  docker-ce-cli-19.03.4

## Create /etc/docker directory.
mkdir /etc/docker

# Setup daemon.
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

mkdir -p /etc/systemd/system/docker.service.d

# Restart Docker
systemctl daemon-reload
systemctl restart docker

第二种:所有node节点都安装cri-o(实际上也要安装docker,不过它额外还安装了一个“容器运行时”,守护进程就用这个额外的“容器运行时”)

modprobe overlay
modprobe br_netfilter

# Setup required sysctl params, these persist across reboots.
cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

sysctl --system

# Install prerequisites
yum-config-manager --add-repo=https://cbs.centos.org/repos/paas7-crio-115-release/x86_64/os/

# Install CRI-O
yum install --nogpgcheck cri-o

#start CRI-O
systemctl daemon-reload
systemctl start crio

第三种:所有node节点都安装containerd

cat > /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

# Setup required sysctl params, these persist across reboots.
cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

sysctl --system


# Install containerd
## Set up the repository
### Install required packages
yum install yum-utils device-mapper-persistent-data lvm2

### Add docker repository
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

## Install containerd
yum update && yum install containerd.io

# Configure containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

# Restart containerd
systemctl restart containerd

和以上三种相关的解释文档可以看这个: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#configure-cgroup-driver-used-by-kubelet-on-control-plane-node

第6步,在所有安装docker的机器上安装kubelet

下载地址:https://dl.k8s.io/v1.17.0/kubernetes-node-linux-amd64.tar.gz

第6.1小步,安装配置起服务

[root@k8s-master k8s-1.17.0]# tar xf kubernetes-client-linux-amd64.tar.gz
[root@k8s-master k8s-1.17.0]# mv kubernetes kubernetes-client
[root@k8s-master k8s-1.17.0]# cd kubernetes-client/client/bin/
[root@k8s-master bin]# cp -p kubectl  /usr/bin/
[root@k8s-master bin]# cat  > /usr/lib/systemd/system/kubelet.service <<-EOF
[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

[Install]
WantedBy=multi-user.target
EOF
[root@k8s-master bin]# mkdir /var/lib/kubelet/
[root@k8s-master bin]# cat > /etc/kubernetes/kubelet <<-EOF
KUBELET_ARGS="\
--kubeconfig=/etc/kubernetes/kubeconfig \
--hostname-override=10.0.199.1 \
--logtostderr=false \
--log-dir=/var/log/kubernetes/kubelet \
--v=0 \
--cgroup-driver=systemd \
"
EOF
[root@k8s-master bin]# systemctl daemon-reload
[root@k8s-master bin]# systemctl enable kubelet
[root@k8s-master bin]# systemctl start kubelet

第6.2小步:测试

说句实在的,在启动的时候,打开/var/log/message 看它的执行数据,觉得没问题,然后使用systemctl status kubelet 看一下是否正常,基本就没啥问题了。

第 6.3小步:总结

这个服务是要依赖于docker的,所以docker服务必须要先正常启动,然后才能是它。这个配置里面只要不是特殊化定制,要改的内容其实没有,就按照我的来就可以了。这个依赖限制就是控制kubelet服务启停的配置文件中的required的参数值。依赖kube-apiserver的那两个组件启停配置文件中就有这个参数。

 

第七步:使用kubectl来测试启动的k8s是否正常;

kubectl get nodes

后面应该还要其它测试的方式,暂时就到这里吧,后面还要接入秘钥验证机制,保证各组件的通信安全

 

全文总结:

安装配置的组件一共有六样,按照启动顺序分别是etcd,kube-apiserver,kube-controller-manager,kube-scheduler,docker,kubelet;

里面没有涉及到秘钥就不想多写了,打字好累,就这样吧。

 

 

 

 

 

 

 

 

 

 

 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐