k8s部署步骤
1.至少2台,建议3台或以上。
2.没有需要FQ拉取镜像的问题,也没有要事先准备镜像的麻烦
3.只需30-45分钟解决部署难题,快速入门
4.文章根据实验整理保证有效
- 设定主机名,将所有的机器名写入到所有机器的/etc/hosts文件
禁用所有主机的swap:
swapoff -a echo vm.swappiness=0 >> /etc/sysctl.conf; sysctl -p #禁止开机自动加载swap分区 vim /etc/fstab #UUID=07bddd02-1748-4049-8373-f68962916061 swap swap defaults 0 0
关闭防火墙、selinux
略
sysctl调整
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system
安装docker; 使用国内yum源;
yum install -y yum-utils yum-config-manager --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #使用阿里的源 yum makecache fast yum install -y docker-ce #//调整docker cgroup driver; cat /etc/docker/daemon.json { "exec-opts": [ "native.cgroupdriver=cgroupfs" ] } docker info|grep -i driver #确认cgroupdriver
安装k8s工具; 使用国内yum源;
# 使用国内yum源 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 master: yum install -y kubeadm kubelet kubectl kubernetes-cni // 其他不必安装 node: yum install -y kubeadm kubelet kubernetes-cni // 其他不必安装 source <(kubectl completion bash ) #master做
kubeadm init
master上执行
kubeadm init \ --apiserver-advertise-address=192.168.1.42 \ --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr=10.244.0.0/16 #如果pod状态异常,可能是因为node还未加入的问题,等待一会再看 根据kubeadm init的返回提示,配置kubectl的配置文件 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm jon
所有node上执行
# kubeadm token create --print-join-command #master上重新获取join的命令,复制命令在node上执行
9.kubelet默认配置的坑
所有机器上执行
# 调整--cgroup-driver: 确保和docker配置的一致(docker info|grep -i driver)
cat /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1 --resolv-conf=/run/systemd/resolve/resolv.conf"
systemctl restart kubelet #需要重启kubelet
确认所有节点都为ready状态
kubectl get nodes -o wide
部署flannel导入flanneld的yml文件;
master上执行
#cni:不用特殊处理, 只需安装上kubernetes-cni即可。 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
k8s测试
master上执行
kubectl run nginx --image=nginx --replicas=3 kubectl expose deployment nginx --port=88 --target-port=80 --type=NodePort # kubectl describe svc/nginx Name: nginx Namespace: default Labels: run=nginx Annotations: <none> Selector: run=nginx Type: NodePort IP: 10.109.197.81 #cluster ip Port: <unset> 88/TCP #cluster port TargetPort: 80/TCP #pod port NodePort: <unset> 30024/TCP #NodePort Endpoints: 172.17.0.2:80,172.17.0.2:80,172.17.0.4:80 Session Affinity: None External Traffic Policy: Cluster Events: <none> kubectl get svc -o wide //查到端口 curl http://nodeip:nodePort访问
导入dashboard
master上执行
#1.下载recommended.yaml wget "https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc6/aio/deploy/recommended.yaml" #2.调整recommended.yaml cat recommended.yaml ...... kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort #添加 ports: - port: 443 targetPort: 8443 nodePort: 32000 #添加 selector: k8s-app: kubernetes-dashboard ...... kubectl apply -f recommended.yaml #导入 #3 添加鉴权信息 vim dashboard-user.yaml #添加该文件 apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin
kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboardkubectl apply -f dashboard-user.yaml #导入
4访问dashboard
获取鉴权字串
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
至此,k8s搭建完毕了, 终于可以愉快的玩耍了 
14.后记
k8s是我见过的最复杂的系统,就算是最小的子系统也很复杂;
部署也是k8s的一大问题,挡住了无数初学者的脚步。kubeadm可以很大程度上解决部署困难的问题。
个人觉得k8s系统中最难搞的是各个组件的学习,将各个组件给串联起来。其次是k8s的生态学习,各种工具各种周边系统。
评论