#前期工作
vim /etc/hosts #设置各节点包括master地址解析
systemctl stop firewalld #关闭防火墙
setenforce 0 #关闭selinux
swapoff -a
sed -i '/swap/s/UUID/#UUID/g' /etc/fstab #关闭swap
yum -y install docker-ce
systemctl enable docker --now #安装docker
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf #设置路由转发并立即生效
yum list --showduplicates kubeadm --disableexcludes=kubernetes
yum -y install kubelet-1.22.2-0 kubeadm-1.22.2-0 kubectl-1.22.2-0 --disableexcludes=kubernetes #查看并选择要安装的版本,不指定默认安装最新版本
systemctl enabled kubelet --now #开机自动启动kubelet
####以上需要在master及所有节点部署####
#部署master并加入节点
####如果安装kubernetes1.21以上版本,需要修改Cgroup的驱动
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://frz7i079.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl daemon-reload
systemctl restart docker #1.21以上版本需要修改,以下版本使用默认的cgroupfs驱动即可(所有节点都需要配置)
wget ftp://ftp.rhce.cc/cka-tool/coredns-1.21.tar #因阿里云缺少coredns镜像,所以另外下载镜像并在所有节点通过docker load -i 导入镜像
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.22.1 --pod-network-cidr=10.244.0.0/16
#使用阿里云镜像,v1.22.1版本,网络设置为10.244.0.0网段
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config #安装完后按顺序执行提示的命令
把kubeadm join.....全段复制到每台节点上运行,加入集群
kubeadm reset #如果配置失败可以使用kubeadm reset重新配置
kubeadm token create --print-join-command #如果忘记密钥可使用此命令重新生成
#安装calico网络
因kubernetes集群中pod分布在不同主机上,为了实现pod跨主机通信,必须要安装CNI网络插件,这次不用flannel选择用calico
wget https://docs.projectcalico.org/v3.19/manifests/calico.yaml
修改calico.yaml文件,把pod所在网段改成kubeadm init时选项--pod-network-cidr所指定的网段,vim打开文件查找“192”,按如下标记修改
#- name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"
修改为
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
去掉上下两个#号并把192.168.0.0/16改成10.244.0.0/16
#配置KUBECONFIG变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
#为了防止多张网卡带来的问题,修改calico.yaml
- name: IP_AUTODETECTION_METHOD
value: "interface=本机网卡名"
查看calico.yaml所需的镜像并下载、打包发到所有节点
grep image calico.yaml
image: calico/cni:v3.14.2
image: calico/cni:v3.14.2
image: calico/pod2daemon-flexvol:v3.14.2
image: calico/node:v3.14.2
image: calico/kube-controllers:v3.14.2
for i in calico/cni:v3.14.2 calico/cni:v3.14.2 calico/pod2daemon-flexvol:v3.14.2 calico/node:v3.14.2 calico/kube-controllers:v3.14.2
do
docker pull $i
done
#下载镜像后执行资源文件创建网络
kubectl apply -f calico.yaml
#查看集群结果
kubectl get nodes
因为kubernetes集群安装好后,kubectl命令默认并不能执行tab键,需要设置
#需要确认已安装bash-completion
vim /etc/profile
在第二行加上source <(kubectl completion bash) #<与括号间没有空格
source /etc/profile
或者
kubectl completion bash >/etc/bash_completion.d/kubectl
kubeadm completion bash >/etc/bash_completion.d/kubeadm
#因为有可能要复制yaml格式的内容,所以设置编辑器vim的属性
vim /root/.vimrc
set paste
#删除集群节点及加入集群
通过命令kubectl drain把节点设置为维护模式,会自动把已经在此节点上运行的pod放入到其它节点运行
kubectl drain 节点名 --delete-local-data --force --ignore-daemonsets
删除节点
kubectl delete node 节点名
重新将节点加入集群,先到节点上运行kubeadm reset清除节点上的设置
通过kubeadm join加入集群
kubeadm join master主机IP:6443 --token.............
****注意,如果重新加入集群出错,可以把/etc/kubernetes/pki和/var/lib/kubelet目录里的内容清空再重新加入集群,删除目录里的内容不是删除目录!!!
#kubernetes常见命令
排错三兄弟
kubectl -n 命名空间 get pod名称 #查看pod状态
kubectl -n 命名空间 describe pod pod名称 #查看pod详细信息
kubectl -n 命名空间 logs pod名称 #查看pod日志
查看命名空间
kubectl get ns
切换命名空间
kubectl config set-context --current --namespace=命名空间名
创建新的命名空间
kubectl create ns 命名空间名
删除命名空间
kubectl delete ns 命名空间名
查看kubernetes集群信息
kubectl cluster-info
查看kubernetes版本
kubectl version
或
kubectl version --short #精简信息
查看kubernetes里支持的api-version
kuberctl api-versions
查看对象kind对应的apiversion
kubectl explain kind对象.apiVersion