1 基础环境配置
1.1 配置基础环境
# (1)更新安装包
sudo apt update
# (2)配置内存
# 临时关闭虚拟内存
sudo swapoff -a
# 永久关闭虚拟内存
sudo vim /etc/fstab
# 注释掉下面一行即可
# /swapfile none swap sw 0 0
# (3)关闭防火墙
# 关闭防火墙
systemctl stop firewalld
# 禁用防火墙
systemctl disable firewalld
1.2 配置基础环境
主机名 | IP地址 | 软件环境 |
mason-master | 192.168.108.136 | docker-v18.09.6、kubelet-v1.18.6 kubeadm-v1.18.6 kubectl-v1.18.6 |
mason-node1 | 192.168.108.137 | docker-v18.09.6、kubelet-v1.18.6 kubeadm-v1.18.6 kubectl-v1.18.6 |
mason-node2 | 192.168.108.138 | docker-v18.09.6、kubelet-v1.18.6 kubeadm-v1.18.6 kubectl-v1.18.6 |
2 安装docker
2.1 安装docker基础环境
# 配置安装环境
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
# 添加安装密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 设置安装稳定版
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
2.2 安装docker
# 查看docker稳定版列表
apt-cache madison docker-ce
# 安装docker,可以不指定版本号,默认安装最新版本
sudo apt-get install docker-ce=5:18.09.6~3-0~ubuntu-bionic
# 设置开机启动
sudo systemctl enable docker
2.3 修改docker配置
添加配置信息
# 进入/etc/docker目录
cd /etc/docker
# 添加daemon.js文件
sudo touch daemon.js
# 编辑daemon.js
sudo vim daemon.js
# 添加内容如下
{
"exec-opts":["native.cgroupdriver=systemd"]
}
重启docker,使配置信息生效
# 加载docker配置
systemctl daemon-reload
# 重启docker
sudo systemctl restart docker
# 重置docker.sock权限
sudo chmod 666 /var/run/docker.sock
3 安装k8s
3.1 安装k8s基础环境(全部节点)
# 配置安装环境
sudo apt-get update && sudo apt-get install -y apt-transport-https
# 添加安装密钥
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
# 添加k8s镜像源
# 进入/etc/apt/sources.list.d目录下
cd /etc/apt/sources.list.d
# 创建kubernetes.list文件
sudo touch kubernetes.list
# 编辑kubernetes.list
sudo vim kubernetes.list
# 在kubernetes.list文件中添加地址如下
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
# 更新安装包
sudo apt-get update
3.2 安装k8s包(全部节点)
# 查看k8s版本号
apt-cache madison kubelet
# 安装k8s
sudo apt-get install kubelet=1.18.6-00 kubeadm=1.18.6-00 kubectl=1.18.6-00
# 设置开机启动
sudo systemctl enable kubelet
# 查看k8s版本
kubectl version
# 查看kubelet状态
# Active: active (running)是启动状态
systemctl status kubelet
# 停止kubelet
systemctl stop kubelet
# 启动kubelet
systemctl start kubelet
3.3 初始化集群(master节点)
(1)查看需要的镜像名称
查看需要的镜像
# 注意:此处列出的版本可能不是(1.18.6),下面下载镜像时,版本设置一致。
kubeadm config images list
(2)在master节点下载镜像
创建download.sh脚本(注意设置脚本权限为可执行)
# 创建文件
touch download.sh
# 设置执行权限
chmod 777 download.sh
脚本内容如下(脚本内容是上一步中的镜像名称)
注意国内无法连接到“k8s.gcr.io”,所以需要配置到阿里云“registry.cn-hangzhou.aliyuncs.com/google_containers”
images=(
kube-apiserver:v1.18.6
kube-controller-manager:v1.18.6
kube-scheduler:v1.18.6
kube-proxy:v1.18.6
pause:3.2
etcd:3.4.3-0
coredns:1.6.7
)
for imageName in ${images[@]};do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
(3)安装k8s
# 注意,如果用虚拟机,内核数量必须要2个及以上。
# --image-repository 镜像加速,指定初始化下载的镜像。
# --apiserver-advertise-address 直接使用当前master主机地址
# --kubernetes-version k8s版本,可以不指定,缺省情况会用最新的
# --service-cidr service网络地址(建议使用10.96.0.0/12,也可以不设置),不可与主机,pod网络地址重复
# --pod-network-cidr pod网络地址(建议使用10.244.0.0/16),不可与主机,service网络地址重复,与后面的Calico相关
# --v 日志等级,5级以上会打印更详细的日志,--v=6开启详细日志打印
sudo kubeadm init \
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
--apiserver-advertise-address=192.168.108.136 \
--kubernetes-version=v1.18.6 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--v=6
(4)初始化过程和结果
I0501 10:41:57.746196 3147 initconfiguration.go:103] detected and using CRI socket: /var/run/dockershim.sock
W0501 10:41:57.746343 3147 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.18.6
[preflight] Running pre-flight checks
........
# 省略日志
........
I0501 10:42:31.652688 3147 loader.go:375] Config loaded from file: /etc/kubernetes/admin.conf
I0501 10:42:31.653740 3147 loader.go:375] Config loaded from file: /etc/kubernetes/admin.conf
# 表示安装成功
Your Kubernetes control-plane has initialized successfully!
# 设置集群
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
# 在将结点加入到集群中,注意下面的token(24小时后过期)
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.108.136:6443 --token p6g2f9.2u6pojkz0q53g6gi \
--discovery-token-ca-cert-hash sha256:466c91b1fd65f49bd5d21c0ccc9204371323a99c96c86a6f429690890b554eaf
3.4 配置节点
(1)配置主节点
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
(2) 将节点添加到集群(子节点)
在子节点中执行以下命令即可
sudo kubeadm join 192.168.108.136:6443 --token p6g2f9.2u6pojkz0q53g6gi --discovery-token-ca-cert-hash sha256:466c91b1fd65f49bd5d21c0ccc9204371323a99c96c86a6f429690890b554eaf
3.5 操作节点
(1)查看节点
# 在master节点上查看集群结点
kubectl get nodes
(2)删除节点
# 删除节点
# 删除节点后,需要在相应的子节点
sudo kubectl delete nodes node1
# 重置主机点,慎重操作!!
# 手动删除配置文件
sudo rm -rf /etc/kubernetes/pki/ca.crt
sudo rm -rf /etc/kubernetes/kubelet.conf
sudo rm -rf $HOME/.kube
# 重置子节点
sudo kubeadm reset
# 重新加载配置文件
systemctl daemon-reload
# 重置子节点,使用以下命令即可
sudo kubeadm reset
3.6 安装flannel
# 下载flannel配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 安装flannel
kubectl apply -f kube-flannel.yml
注意:创建Pod时,如果出现Pod之间无法ping通,可以在子节点执行以下命令。
# iptables是Linux平台下包过滤防火墙
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -F
sudo iptables -L -n