kubernetes-install
秉承着烂笔头不如好记性的的歪门邪道,特此系统的记录kubernetes的安装全流程,及踩坑记录。默默说一句坑
真多。
来吧,我们一起来快速拿下它并且有意识的规避各种坑,请指教
操作系统初始化
- 关闭防火墙(
all
)
# 临时关闭防火墙systemctl stop firewalld# 永久关闭防火墙systemctl disable firewalld# 验证 systemctl status firewalld
- 关闭selinux(
all
)
# 临时关闭setenforce 0# 永久sed -i 's/enforcing/disabled/' /etc/selinux/config
- 关闭swap(
all
)
# 临时 swapoff -a # 永久sed -ri 's/.*swap.*/#&/' /etc/fstab
- 设置主机名称(
all
)
# 设置名称(k8s-m-1)忽略大写字母hostnamectl set-hostname k8s-m-1# 验证hostname
- 在
Master
添加Hostname(master
)
# 设置cat >> /etc/hosts << EOF masterIp master node1Ip node1 node2Ip node2 EOF# egcat >> /etc/hosts << EOF192.168.50.212 k8s-m-1192.168.50.87 k8s-n-1192.168.50.85 k8s-n-2EOF
- 将桥接的IPV4 流量传递到iptables的链(
all
)
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-ip6tables = 1EOF# 生效sysctl --system
- 时间同步(
All
)
yum install -y ntpdate ntpdate time.windows.com# 三台机子输出如下则成功(相差几秒或几分为正常现象)
安装Docker
官方文档-安装
- Docker安装sh Script:(
All
)
# You can use scripts for one click installation,You may need to type enter at the end# remove docker sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine# Set up repositorysudo yum install -y yum-utils# Use Aliyun Dockersudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# install docker from yumyum install -y docker-ce docker-ce-cli containerd.io# restart dockersystemctl restart docker# cat version docker --version
- 配置加速(
all
)
```sh j
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://etdea28s.mirror.aliyuncs.com“]
}
EOF
reload
sudo systemctl daemon-reload
sudo systemctl restart docker
检查阿里云加速
 ## kubernetes安装 - 配置kubernetes源(`all`) ```sh cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
由于官网kubernetes源在国外有墙,直接使用官方源会导致安装失败。所以我们配置国内的阿里源
- 安装 kubectl kubelet kubeadm(
all
)
# install kubectl kubelet kubeadmyum install -y kubectl kubelet kubeadm# set boot on opening computersystemctl enable kubelet
- 初始化k8s部署(
Master
)
kubeadm init \ --apiserver-advertise-address=youselfIp of Master \ --image-repository registry.aliyuncs.com/google_containers \# 不冲突即可--service-cidr=10.10.0.0/16 \ --pod-network-cidr=10.122.0.0/16# eg kubeadm init \ --apiserver-advertise-address=192.168.50.212 \ --image-repository registry.aliyuncs.com/google_containers \ --service-cidr=10.10.0.0/16 \ --pod-network-cidr=10.122.0.0/16
常见错误:running with swap on is not supported. Please disable swap
[preflight] If you know what you are doing, you can make a check non-fatal with `—ignore-preflight-
errors=…`
原因:系统自动进行分区
解决:
# 临时 swapoff -a # 永久sed -ri 's/.*swap.*/#&/' /etc/fstab
- following as a regular user(
Master
)
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- join master node(
node
)
kubeadm join 172.16.164.136:6443 --token 9oilao.bpbxcm5zkk0jjcgm --discovery-token-ca-cert-hash sha256:609794bd03915be382bdb130c4c180e89cdc863d35cf99be79cf4ddcbfacee24
加入成功,如下图
此时我们在
Master
节点上使用命令kubectl get nodes
查看节点信息:如下图所示
此时的kubectl get nodes
的status都是NotNotReady:
查看kubernetes运行状态:
kubectl get pods -n kube-system
如图:
果然,两个Pending犹豫未决
此时我们部署CNI网络,配置如下
# 根据官方文档提示配置CNI网络kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml# 报错:The connection to the server raw.githubusercontent.com was refused - did you specify the right host or port? 原因:外网不可访问 -> 在https://www.ipaddress.com/查询raw.githubusercontent.com的真实IP。
sudo vi /etc/hosts199.232.28.133 raw.githubusercontent.com# 如下
# 开启IPVS,修改ConfigMap的kube-system/kube-proxy中的模式为ipvskubectl edit cm kube-proxy -n kube-system # 将空的data -> ipvs -> mode中替换如下mode: "ipvs"
在此运行kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
成功,如图
此时运行kubectl get nodes
效果图如下->成功。(肯能并不一定会立马成功,上面👆确定没问题,请稍等片刻即可)
测试kubernetes
# 创建nginx镜像 Create a deployment with the specified name# kubectl create deployment NAME --image=image -- [COMMAND] [args...] [options]kubectl create deployment nginx --image=nginx# 对外暴露端口kubectl expose deployment nginx --port=80 --type=NodePort# 查看pod服务kubectl get pod,svc
成功