操作系统
#服务器1
[root@VM_0_12_centos ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
#服务器2
[root@VM_0_3_centos ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
服务器1作为Master,其IP为193.112.177.239
服务器2作为Node1 ,其IP为123.207.26.143
部署前的准备工作
docker-ce的安装
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
# Step 5: 查看安装的docker-ce的版本
docker version
#配置阿里云的镜像源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
#通过登陆https://cr.console.aliyun.com,获取属于自己的镜像源的地址。ß
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
etcd的安装
ETCD是用于共享配置和服务发现的分布式、一致性的KV存储系统,主要包括了增删改查、安全认证、集群、选举、事务、分布式锁、Watch机制等等,实现了RAFT协议,功能相当强大
有两台云主机
# step 1: 将2台主机的信息添加到三台主机的hosts文件中,编辑/etc/hosts写入信息如下
123.207.26.143 node1
193.112.177.239 etcd2
# step 2:为每一台主机安装etcd
yum install etcd -y
# step 3:配置每一台主机的集群信息,编辑/etc/etcd/etcd.conf
#node1节点
# [member]
# 节点名称
ETCD_NAME=node1
# 数据存放位置
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
# 监听其他 Etcd 实例的地址
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
# 监听客户端地址
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
#[cluster]
# 通知其他 Etcd 实例地址
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://node1:2380"
# 初始化集群内节点地址
ETCD_INITIAL_CLUSTER="node1=http://node1:2380,etcd2=http://etcd2:2380"
# 初始化集群状态,new 表示新建
ETCD_INITIAL_CLUSTER_STATE="new"
# 初始化集群 token
ETCD_INITIAL_CLUSTER_TOKEN="mritd-etcd-cluster"
# 通知 客户端地址
ETCD_ADVERTISE_CLIENT_URLS="http://node1:2379,http://node1:4001"
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://etcd2:2380"
ETCD_INITIAL_CLUSTER="node1=http://node1:2380,etcd2=http://etcd2:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="mritd-etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://etcd2:2379,http://etcd2:4001"
flannel的安装
#为每一台主机安装flannel,作为docker之间通信的组件
curl -L https://github.com/coreos/flannel/releases/download/v0.7.0/flannel-v0.7.0-linux-amd64.tar.gz -o flannel.tar.gz
mkdir -p /opt/flannel
tar xzf flannel.tar.gz -C /opt/flannel
安装k8s
在Master安转k8s server
API SERVER是整个k8s集群的注册中心、交通枢纽、安全控制入口。
#step 1:下载k8s-server
wget https://dl.k8s.io/v1.10.0/kubernetes-server-linux-amd64.tar.gz
#step 2:解压
tar xvf kubernetes-server-linux-amd64.tar.gz
#step 3:拷贝kube-apiserver到/usr/local/bin/目录下
cp ./kubernetes/server/bin/kube-apiserver /usr/local/bin/
#step 4:在/usr/lib/systemd/system/目录下创建kube-apiserver.service,编辑内容如下
[Unit]
Description=Kube API Server
After=etcd.service
Wants=etcd.service
[Service]
Type=notify
EnvironmentFile=/etc/kubernetes/apiserver
ExecStart=/usr/local/bin/kube-apiserver $KUBE_API_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
#step 5:在/etc/kubernetes/目录下创建apiserver配置文件,编辑内容如下
KUBE_API_ARGS="--etcd-servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --service-cluster-ip-range=170.170.0.0/16 --service-node-port-range=1-65535 --admission-control=NamespaceLifecycle,LimitRanger,ResourceQuota --logtostderr=false --log-dir=/home/chen/log/kubenetes --v=2"
#step 6:运行kube-apiserver
sudo systemctl daemon-reload
sudo systemctl enable kube-apiserver.service
sudo systemctl start kube-apiserver.service
#step 7:查看是否安装成功
curl http://localhost:8080/api/
在Master安装kube-controller-manager
Kube Controller Manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Kube Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
#step 1:拷贝kube-controller-manager到/usr/local/bin/
cp ./kubernetes/server/bin/kube-controller-manager /usr/local/bin/
#step 2:在/usr/lib/systemd/system/目录下创建kube-controller-manager.service编辑内容如下
[Unit]
Description=Kube Controller Manager
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=/etc/kubernetes/controller-manager
ExecStart=/usr/local/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
#step 3:在/etc/kubernetes/目录下创建controller-manager配置文件编辑如下
KUBE_CONTROLLER_MANAGER_ARGS="--master=http://127.0.0.1:8080 --logtostderr=false --log-dir=/home/chen/log/kubernetes --v=2"
#step 4:启动kube-controller-manager
sudo systemctl daemon-reload
sudo systemctl enable kube-controller-manager.service
sudo systemctl start kube-controller-manager.service
在Master安装kube-scheduler
Kube Scheduler是负责调度Pod到具体的Node,它通过API Server提供的接口监听Pods,获取待调度pod,然后根据一系列的预选策略和优选策略给各个Node节点打分排序,然后将Pod调度到得分最高的Node节点上。
#step 1:拷贝kube-scheduler到/usr/local/bin/
cp ./kubernetes/server/bin/kube-scheduler /usr/local/bin/
#step 2:在/usr/lib/systemd/system/目录下创建kube-scheduler.service编辑内容如下
[Unit]
Description=Kube Scheduler
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=/etc/kubernetes/scheduler
ExecStart=/usr/local/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
#step 3:在/etc/kubernetes/目录下创建scheduler配置文件编辑如下
sudo systemctl daemon-reload
sudo systemctl enable kube-scheduler.service
sudo systemctl restart kube-scheduler.service
在Node安转kubernetes-node
此处是所有node节点都需要进行的安装操作
在k8s集群中,每个Node节点都会启动kubelet进程,用来处理Master节点下发到本节点的任务,管理Pod和pod中的容器。kubelet会在API Server上注册节点信息,定期向Master汇报节点资源使用情况。
#step 1:下载k8s-node
wget https://dl.k8s.io/v1.10.0/kubernetes-node-linux-amd64.tar.gz
tar xvf kubernetes-node-linux-amd64.tar.gz
#step 2:拷贝kubelet到/usr/local/bin/
cp ./kubernetes/node/bin/kubelet /usr/local/bin/
#step 3:在/usr/lib/systemd/system/目录下创建kubelet.service编辑内容如下
[Unit]
Description=Kube Kubelet Server
After=docker.service
Requires=docker.service
[Service]
ExecStart=/usr/local/bin/kubelet --kubeconfig=/etc/kubernetes/kubelet.yaml --fail-swap-on=false --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
#step 4: 目录下创建配置文件,包括kubelet和kubelet.yaml。kubelet.yaml内容如下
apiVersion: v1
kind: Config
clusters:
- name: local
- cluster:
server: http://193.112.177.239:8080
users:
- name: kubelet
contexts:
- context:
cluster: local
user: kubelet
- name: kubelet-context
current-context: kubelet-context
#step 5:启动kubelet
sudo systemctl daemon-reload
sudo systemctl enable kubelet.service
sudo systemctl start kubelet.service
#step 6:查看是否启动成功
sudo systemctl status kubelet.service
在node中安装配置kube-proxy
kube-proxy是管理service的访问入口,包括集群内Pod到Service的访问和集群外访问service。关于service和pod的概念可以自行网上查看。
#step 2:拷贝kube-proxy到/usr/local/bin/
cp ./kubernetes/node/bin/kube-proxy /usr/local/bin/
#step 3:在/usr/lib/systemd/system/目录下创建kube-proxy.service编辑内容如下
[Unit]
Description=Kube Kubelet Server
After=docker.service
Requires=docker.service
[Service]
ExecStart=/usr/local/bin/kubelet --kubeconfig=/etc/kubernetes/kubelet.yaml --fail-swap-on=false --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
#step 4:在/etc/kubernetes/目录下创建proxy配置文件内容如下
KUBE_PROXY_ARGS="--master=http://193.112.177.239:8080 --logtostderr=false --log-dir=/home/chen/log/kubernetes --v=2"
#step 5:启动proxy
sudo systemctl daemon-reload
sudo systemctl enable kube-proxy.service
sudo systemctl start kube-proxy.service
(此处需注意主机的名字不能有_否则不能创建节点,修改主机名可以参考https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_043_hostname.html)
如在node上连接不上apiserver可运行以下命令其中apiserverIP为IP
kebuctl -s http://apiserverIP:8080 version
参考
https://www.cnblogs.com/zhenyuyaodidiao/p/6237019.html
https://blog.csdn.net/weixin_39686421/article/details/80333015