在node节点上安装redhat-ca.crt:
[root@k8s-node1 ~]# yum install *rhsm* -y

yum -y install master etcd

vi /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.0.140:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.0.140:2379,http://127.0.0.1:2379"
ETCD_MAX_SNAPSHOTS="5"
ETCD_NAME="etcd1"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.140:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.140:2379"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.0.140:2380,etcd2=http://192.168.0.141:2380,etcd3=http://192.168.0.142:2380"
2 node节点配置 安装部署kubernetes-node/etcd/flannel/docker安装命令
yum list installed | grep docker
yum remove docker-ce.x86_64 -y
yum remove docker-ce-cli.x86_64 -y
yum remove containerd.io.x86_64 -y
rm -rf /var/lib/docker
yum -y install kubernetes-node etcd flannel docker
配置etcdvim /etc/etcd/etcd.conf
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.0.141:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.0.141:2379,http://127.0.0.1:2379"
ETCD_NAME="etcd2"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.141:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.141:2379"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.0.140:2380,etcd2=http://192.168.0.141:2380,etcd3=http://192.168.0.142:2380"
3启动etcd clustersystemctl start etcd.service
systemctl status etcd.service
etcdctl cluster-health
etcdctl member list
3Kubernetes集群配置1master节点配置 配置kube-apiserver配置文件vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.0.140:2379,http://192.168.0.141:2379,http://192.168.0.142:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=AlwaysAdmit"
KUBE_API_ARGS=""
grep -v '^#' /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.0.140:8080"
配置kube-controller-manager配置文件grep -v '^#' /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS=""
配置kube-scheduler配置文件grep -v '^#' /etc/kubernetes/scheduler
KUBE_SCHEDULER_ARGS="--address=0.0.0.0"
启动服务for i in kube-apiserver kube-controller-manager kube-scheduler;do systemctl restart $i; systemctl enable $i;done2nodes节点配置 配置etcdetcdctl set /atomic.io/network/config '{"Network": "172.16.0.0/16"}'
{"Network": "172.16.0.0/16"}
配置node网络-flannel方式grep -v '^#' /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.0.140:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"
FLANNEL_OPTIONS=""
验证网络信息
etcdctl get /atomic.io/network/config
etcdctl ls /atomic.io/network/subnets
配置node kube-proxygrep -v '^#' /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.0.140:8080"
grep -v '^#' /etc/kubernetes/proxy
KUBE_PROXY_ARGS="--bind=address=0.0.0.0" 配置node kubeletgrep -v '^#' /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=192.168.0.141"
KUBELET_API_SERVER="--api-servers=http://192.168.0.140:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""
配置其他nodevi /etc/kubernetes/kubelet
KUBELET_HOSTNAME="--hostname-override=x.x.x.x" 启动node服务for i in flanneld kube-proxy kubelet docker;do systemctl restart $i;systemctl enable $i;systemctl status $i ;done4查看集群状态kubectl get nodes
安装完Docker后,设置FORWARD规则为ACCEPT:iptables -P FORWARD ACCEPT
5测试使用1命令方式 建立podkubectl run nginx --image=nginx --port=80 --replicas=2 遇到问题-创建成功但是kubectl get pods 没有结果
提示信息:no API token found for service account default
解决办法:编辑/etc/kubernetes/apiserver 去除 KUBE_ADMISSION_CONTROL中的SecurityContextDeny,ServiceAccount,并重启kube-apiserver.service服务
pod-infrastructure:latest镜像下载失败
-报错信息:image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request.
解决方案:yum install *rhsm* -y
登陆容器报错
kubectl exec -it nginx-bl7lc /bin/bash
Error from server: error dialing backend: dial tcp 10.10.10.16:10250: getsockopt: connection refused
解决方法:
10250是kubelet的端口.在Node上检查/etc/kubernetes/kubelet.KUBELET_ADDRESS需要修改为node ip
命令查看kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-3449338310-h6l9d 1/1 Running 0 6m
nginx-3449338310-n4grl 1/1 Running 0 6m
kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 2 2 2 2 13m
kubectl expose deployment nginx --port=80 --type=LoadBalancer (通过端口将应用连接到公网)
service "nginx" exposed
expose命令将会创建一个service,将本地(某个节点上)的一个随机端口关联到容器中的80端口。kubectl get service(查service)
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 443/TCP 21h
nginx 10.254.160.227 80:30255/TCP 7s
外网访问:
elinks --dump http://10.10.10.16:30255
Welcome to nginx!
删除deployment 与service
kubectl delete deployment nginx
deployment "nginx" deleted
kubectl delete service nginx
service "nginx" deleted
2配置文件方式 定义pod 文件vim nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
restartPolicy: Always
发布到kubernetes集群中kubectl create -f nginx-pod.yaml
pod "nginx" created查看pod
kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 16s
定义与之关联的service 文件
vim nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
sessionAffinity: ClientIP
selector:
app: nginx
ports:
- port: 80
nodePort: 30080
创建service
kubectl create -f nginx-svc.yaml
service "nginx-service" created
查看刚刚创建的service
kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 443/TCP 23h
nginx-service 10.254.154.111 80:30080/TCP 20s
验证结果如下
elinks --dump http://10.10.10.16:30080
Welcome to nginx!