系统 | redhat7.x |
swap | 永久关闭(当前状态也要关闭) |
CPU/内存 | 至少2C4G |
dns条目 | 在/etc/hosts文件中加入主机名以及ip的对应关系 |
主机的信息如下:
主机名 | ip | 操作系统 | 主机类型 |
k8s-master | 10.0.199.1 | contOS7.7.1908 | 虚拟机 |
前言:先看第五步,我发现docker的安装没写。临时补上,先看docker安装,不然k8s是启动不起来的。
下载地址: https://github.com/etcd-io/etcd/releases/download/v3.3.18/etcd-v3.3.18-linux-amd64.tar.gz
#解压,配置,启动三步曲走起
[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多机部署的集群,所以就练手一下,可以忽略
以上到此为止,etcd配置就完成了,小白应该能看懂吧~ ,中间需要理解的也就是etcd的配置文件怎么被由systemd启停控制的etcd来识别的。上面systemd的配置看懂了,也就明白了;还有etcd的那个配置文件里面的ip注意点,要用你自己的主机的ip地址。看下一步把。
下载地址: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
使用 systemctl status kube-apiserver -l 来看这个服务的状态是怎么样的,如果有以外,最好结合/var/log/message的输出以及,它的配置文件中的参数指定的日志路径下查看它生成的日志,然后排查问题
其实可以看到需要配置的apiserver这个文件里面放的就是kube-apiserver需要的参数信息了,也就是由于它的参数太多就用一个文件来存放,为了实现以后参数改变的方便性,如果没有指出来的参数都会使用默认值。
还有就是注意这个配置文件中的etc的地址,关于参数的具体含义,可以参考这个地址的内容:https://my.oschina.net/u/3797264/blog/2250066
配置过程和上面的一样,就是参数不一样。我贴出来
[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
说句实在的,在启动的时候,打开/var/log/message 看它的执行数据,觉得没问题,然后使用systemctl status kube-controller-manager 看一下是否正常,基本就没啥问题了。
这个服务是要依赖于kube-apiserver的,所以kube-apiserver必须要先正常启动,然后才能是它。这个配置里面只要不是特殊化定制,要改的内容其实没有,就按照我的来就可以了。
过程和上面两大步一样
[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
说句实在的,在启动的时候,打开/var/log/message 看它的执行数据,觉得没问题,然后使用systemctl status kube-scheduler 看一下是否正常,基本就没啥问题了。
这个服务也是要依赖于kube-apiserver的,所以kube-apiserver必须要先正常启动,然后才能是它。这个配置里面只要不是特殊化定制,要改的内容其实没有,就按照我的来就可以了。
注: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 <
第二种:所有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 <
第三种:所有node节点都安装containerd
cat > /etc/modules-load.d/containerd.conf < /etc/sysctl.d/99-kubernetes-cri.conf < /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
下载地址:https://dl.k8s.io/v1.17.0/kubernetes-node-linux-amd64.tar.gz
[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
说句实在的,在启动的时候,打开/var/log/message 看它的执行数据,觉得没问题,然后使用systemctl status kubelet 看一下是否正常,基本就没啥问题了。
这个服务是要依赖于docker的,所以docker服务必须要先正常启动,然后才能是它。这个配置里面只要不是特殊化定制,要改的内容其实没有,就按照我的来就可以了。这个依赖限制就是控制kubelet服务启停的配置文件中的required的参数值。依赖kube-apiserver的那两个组件启停配置文件中就有这个参数。
kubectl get nodes
后面应该还要其它测试的方式,暂时就到这里吧,后面还要接入秘钥验证机制,保证各组件的通信安全
安装配置的组件一共有六样,按照启动顺序分别是etcd,kube-apiserver,kube-controller-manager,kube-scheduler,docker,kubelet;
里面没有涉及到秘钥就不想多写了,打字好累,就这样吧。